跳至頁尾內容
Iron Academy Logo
C#應用程式
C#應用程式

其他類別

實時狀態消息和微調器 - Spectre Console 系列

[[academy-video-youtube({"vid": "_BMinZeyMko", "start_time": "0", "title": "Live Status Messages and Spinners - Spectre Console Series", "creator": "Tim Corey", "length": "9m 31s"})]]

Spectre Console 是一個強大的 .NET 程式庫,讓您可以用 C# 建立漂亮的終端應用程式。 在他的影片系列中,Tim Corey 一一講解其功能。 在關於《動態狀態消息和旋轉器 - Spectre Console 系列》的影片中,Tim 專注於 Spectre Console Status,這是一個用於在控制檯應用執行長時間任務時顯示動態狀態消息和動畫旋轉器的工具。

在這篇文章中,我們將深入瞭解 Spectre Console 的狀態功能,並跟隨 Tim 的解說。 您將看到 Tim 最初設置了一個簡單的載入旋轉器,然後對其進行自訂,最後在一個更真實的異步範例中下載資料。 在演示結束時,您將看到 Spectre Console 如何更輕鬆地向使用者提供有關幕後發生情況的清晰訊息。

從一個簡單的狀態範例開始 (0:31)

Tim 先以最簡單的狀態消息範例開始。 他使用以下程式碼:

AnsiConsole.Status()
    .Start("載入中...", ctx =>
    {
        Thread.Sleep(3000);
    });

這是將狀態指示器新增到控制台專案中最簡單直接的方法。 他解釋說,在大括號內,您可以執行任何命令或運行任何需要時間的程式碼。在演示中,Tim 只是使用了一個三秒的暫停來模擬慢速操作。

運行這個控制台應用程式時,您會立即看到行上的"載入中..."字串以及預設的旋轉器。 這個快速演示顯示了 Spectre Console 如何將即使是普通提示轉變為更具活力的內容。

Spectre Console Live Status Spinners 1 related to 從一個簡單的狀態範例開始 (0:31)

自訂旋轉器 - 支援的型別 (1:54)

在 1:54,Tim 轉向自訂。 Spectre Console 提供了一個內建旋轉器型別的長列表,您可以透過使用以下程式碼更換:

ctx.Spinner = Spinner.Known.Aesthetic;

他瀏覽了可用型別並選擇了"Aesthetic",顯示旋轉器的格式可以輕鬆更改。 這種小改變已經讓您的控制台應用程式看起來更精緻。

Spectre Console Live Status Spinners 2 related to 自訂旋轉器 - 支援的型別 (1:54)

Tim 在 2:39 指出,並不是每個終端都完全支援每個旋轉器。 如果您是在 Visual Studio 內運行,可能會看到一個替代動畫。 這是 Spectre Console 用於優雅處理錯誤的方式 —— 它自動選擇一個適合您環境的簡單旋轉器,讓使用者仍然能夠獲得反饋。

這為什麼讓控制台應用程式對使用者更友善 (3:07)

在 3:07,Tim 暫停解釋此功能的重要性。 如果您的應用程式正在建立或下載文件、處理資料或進行任何耗時的操作,具有旋轉器的狀態消息"讓使用者知道正在發生某些事情"。 否則,空白的控制台可能看起來像是凍結了。

Tim 強調,當任務完成時,狀態消失,只留下結果資訊。 這有助於保持您的控制台應用程式同時乾淨和資訊豐富。

轉向 Await AnsiConsole 用於異步工作 (3:24)

到目前為止,Tim 使用了 Start()。 但在實際的應用程式中,您可能正在等待操作。 在 3:34,他切換到:

await AnsiConsole.Status()
    .StartAsync("載入中...", async ctx =>
    {
        // 異步工作
    });

這個小變化 —— 使用 await AnsiConsole 和 .StartAsync() —— 讓您可以在狀態塊中運行異步程式碼。 Tim 在 4:02 警告說,內部的上下文對於 UI 更新來說不是執行緒安全的。 始終"回到 UI 執行緒"更改旋轉器或狀態文字。 這個檢查避免了當您嘗試從其他執行緒更新時出現奇怪的錯誤。

在迴圈中下載資料 - 一個更真實的演示 (4:26)

接下來,Tim 建立了一個迴圈來模擬一個真實世界的任務:從 API 下載 20 門課程。 他將程式碼改寫成如下形式:

for (int i = 1; i < 21; i++)
{
    ctx.Status($"下載課程 {i}...");
    var jsonResponse = await Helpers.Fetch($"https://sample.com/courses/{i}");
    AnsiConsole.MarkupLine($"[red]課程 {i} 已下載[/]");
}

在這裡,他顯示了三個重要的 Spectre Console 功能互相協作:

  • Context.Status() 動態改變顯示在旋轉器旁邊的狀態字串。

  • await Helpers.Fetch(...) 代表了一個真實的異步任務在您的控制台應用程式中。

  • AnsiConsole.MarkupLine() 使用 Spectre 的標記語言來新增顏色。 Tim 選擇了 [red] 只是"為了做點有趣的事情"。

這個例子展示了您可以多麼輕鬆地將進度反饋新增到專案中而不需複雜的程式碼。

看到運行中的應用程式 (7:21)

當 Tim 運行新程式碼時,您會看到綠色的旋轉器(他主題中的 Aesthetic 型別)和狀態文字更改為"正在下載課程 1..."、"正在下載課程 2...",等等。 當每次下載完成時,一行紅色的文字出現:"課程 1 已下載","課程 2 已下載"。

Spectre Console Live Status Spinners 3 related to 看到運行中的應用程式 (7:21)

Tim 指出,這是跟蹤上傳資料或處理文件等任務的好方法。 "您留下的是結果資訊,但等待下載的資訊不再存在了,"他在 7:27 解釋。

Spectre Console Live Status Spinners 4 related to 看到運行中的應用程式 (7:21)

同步與異步:沒有性能差異 (8:00)

在 8:00,Tim 談到性能。 使用 Start() 和 StartAsync() 並不會影響旋轉器動畫的速度。 重要的是您內部的程式碼是否為異步。 如果您正在使用 await,您需要 .StartAsync(); 否則,.Start() 就可以。

這意味著您可以將狀態反饋新增到控制台應用程式中,而不必擔心其變慢。 它僅僅封裝正在進行的工作。

內建和自訂旋轉器 - 一個需要檢查的長列表 (8:45)

在結尾,Tim 強調說,Spectre Console 提供了"大量"的內建旋轉器。 您可以滾動列表並選擇您喜歡的東西 —— 從點到箭頭到"美學"。 在系列後面,Tim 將展示如何建立自訂旋轉器,以便您可以完全匹配您的應用程式品牌或顏色。

這種靈活性是 Spectre Console 作為構建漂亮控制台應用程式的絕佳工具的一部分原因。 它為您提供了進度反饋、提示輸出和動態視覺效果,而無需重新發明輪子。

總結 - Spectre Console 狀態運作中 (9:07)

透過關注 Tim Corey 的 影片,我們已經看到了如何使用 Spectre Console 狀態改善 .NET 控制台應用程式:

  • 使用 AnsiConsole.Status().Start() 或 await AnsiConsole.Status().StartAsync() 在任務執行時顯示旋轉器和狀態文字。

  • 在迴圈內動態更新 context.Status()。

  • 用 AnsiConsole.MarkupLine() 和 Spectre 標記語言為紅色、綠色或其他顏色的字樣輸出結果。

  • 從內建的旋轉器列表中選擇或稍後建立您自己的。

  • 在保持控制台輸出乾淨的同時,向使用者提供清晰的資訊。

這些小細節可以將普通的控制台專案變成漂亮的控制台應用程式。 Spectre Console 的狀態功能讓共享進度、檢查結果、並使您的應用程式提示更友好和互動變得更簡單。

Hero Worlddot related to 實時狀態消息和微調器 - Spectre Console 系列
Hero Affiliate related to 實時狀態消息和微調器 - Spectre Console 系列

分享您所愛以賺取更多報酬

您是否為使用 .NET、C#、Java、Python 或 Node.js 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話