跳過到頁腳內容
Iron Academy Logo
C# 應用程式
C# 應用程式

其他分類

屏幕上即時修改數據 - Spectre Console系列

Tim Corey
9m 17s

Spectre.Console 是一個 .NET 程式庫,可以讓您創建超越黑白命令行的美觀控制台應用程式。在他的影片"在螢幕上實時修改數據 – Spectre 控制台系列"中,Tim Corey 演示了 Spectre Console 的即時顯示功能。 此功能可讓您在控制台應用程式中實時顯示進度和更新數據在螢幕上。

在本文中,我們將逐步介紹 Tim 的影片,展示他做每件事的位置以及他是如何解釋的。

實時顯示介紹

Tim 首先介紹了 Spectre.Console,以及它如何讓您的控制台應用程式變得更加美觀。 在本系列中,每一節課程都是一個簡短的示範,並且在描述中提供了源代碼連結。

他解釋說,這一課主要說明如何使用實時顯示功能來修改螢幕上的現有數據以進行實時更新。 Tim 也鼓勵觀眾訂閱並造訪 iamtimcorey.com 以獲得更多的培訓資源。

創建新的資料表

Tim 顯示他已經創建了一個包含標題、課程和小時數量的資料表。 此表將用於渲染從 API 獲取的課程信息。

他還介紹了一種名為 CourseInfo 的記錄類型,具有強類型屬性,用於課程名稱、課程數量和課程持續時間(小時)。 這與 API 結構相匹配,讓他能夠以強類型的方式輕鬆輸出文本。

該表格的顯示頁腳已啟用,以便以後可顯示總計。 Tim 指出,此佈局是 Spectre 支持的許多任意小部件之一,用於創建美觀的控制台應用程式。

開始實時顯示

Tim 使用方法 AnsiConsole.Live(table).StartAsync(...) 開始實時顯示。 他指出,還有一個非異步的 Start() 函數,如果您不需要等待長時間運行的任務,可以使用它。

他將代碼包裝在一個異步上下文中,這樣控制台可以在新行到達時刷新。這演示了當前終端的能力,可以在不清除螢幕的情況下重繪輸出。

獲取數據和顯示進度

在實時上下文中,Tim 寫了一個 for 循環,使用一個 int 索引從 1 遍歷到 31,因為範例 API 列出了 31 個課程。 對於每個索引,他調用輔助類方法以獲取 API 數據。

此輔助方法將原始 JSON 字符串轉換為強類型的 CourseInfo 對象。 Tim 故意一次調用一個課程的 API,而不是批量呼叫,以展示如何實時顯示進度——這是在控制台環境中模擬長時間運行任務的一個很好例子。

他指出,如果他只想要一個請求,他可以在 URL 中刪除 /i,但他正在進行多次呼叫"以展示事情逐漸進展"。

添加行和更新輸出

隨著每一個返回的 CourseInfo 實例,Tim 調用 table.AddRow(...) 來創建一個新行,內容包括課程的標題、課程數量和持續時間(小時)。 他使用 $ 格式的字符串插值,並在需要時調用 .ToString() 以將非字符串的值轉換。

這使表格在每次迭代中都可以添加新行,展示了 Spectre 如何動態更新行。 他還演示了如何通過明確轉換來捕獲潛在的問題,例如類型不匹配。

自訂頁腳和運行總計

接下來,Tim 演示了如何向列添加自訂頁腳。 他設定 table.Columns[0].Footer 以顯示目前下載的課程數量。 他對第二和第三列重複此操作,但這次統計課程數量和所有課程的總時數。

透過這樣做,使用者可以很快看出累積了多少課程及多少小時。 這是一個使用 Spectre 控制項的實例,可以顯示數值總和以及實時數據。

Tim 短暫"解釋"了視窗,這樣您就可以看到隨著數據增長的完整佈局。 他解釋了頁腳是 Spectre 提供的內建樣式的一部分,就像邊框、標記和主題一樣。

在每個操作後刷新上下文

Tim 強調了實時顯示的"關鍵點":每次進行變更後,請務必調用 context.Refresh()。 這確保終端實際上會以新數據重繪您的輸出。 如果沒有這樣做,您的行、頁腳甚至不同顏色都不會出現,直到實時會話結束。

調試和例外處理

當他首次執行代碼時,Tim 遇到了一個索引超出範圍的異常。 他詳細說明了他的錯誤——錯計了列索引(它們是 0,1,2 而非 0,2,3)——並予以修正。

這溫馨提醒,即使在 Spectre.Console 中,您也應該捕捉錯誤並確保您的索引和參數正確。

Spectre Console Modifying Data Live 1 related to 調試和例外處理

觀看實時顯示

Tim 執行了更正後的代碼,並演示了實時顯示:行被加入、總計更新、頁腳顯示合計值。

您可以看到"1,652個課程"、"403.5小時"和"總共31個課程"隨著數據的流入。 這正是使 Spectre Console 的實時顯示感覺像是一個儀表板內置於您當前終端系統的操作。

Spectre Console Modifying Data Live 2 related to 觀看實時顯示

僅聚焦於頁腳

為了使更改更明顯,Tim 將添加行的代碼註解掉,使只有頁腳更新。 這顯示了即使沒有滾動數據,您也可以實時追蹤總計。

他還指出 Spectre 自動調整列寬,當數字增長時(例如從9到10)。 這是該程式庫的自動寬度與格式檢測的一個小但強大的示例。

Spectre Console Modifying Data Live 3 related to 僅聚焦於頁腳

超越表格——任意小部件和主題

Tim 解釋了實時顯示不僅限於表格。 您可以將其應用於任意小部件,如面板、用戶輸入提示,甚至是條形圖。 您可以更新文本、高亮顯示不同的顏色,應用自定義顏色編碼主題,或者添加旋轉器。

他提到您可以更改樣式,例如藍色、綠色或灰色以匹配您的主題,您甚至可以操作嵌入式佈局或小部件。 這種靈活性使得 Spectre"深受"其他生態系統中特色豐富的控制台工具的啟發(其中一些甚至是用 python 編寫的),但為 .NET 量身打造。

異步與同步實時顯示啟動

Tim 解釋了他為什麼使用異步版本:因為他正在等待 API 呼叫。 如果您的更新不是異步的,您可以不用 await 而直接調用 Start()。

這一選擇幫助您構建美觀的控制台應用程式,即使面對長時間運行的任務也能保持響應。

結論

在他的影片中,Tim 方才展示瞭如何構建一個 Spectre Console 實時顯示,可以在控制台內直接更新、總計和刷新數據。

這是促使用戶輸入、添加小部件或構建具有不同顏色及自訂色彩主題儀表板的絕佳基礎。 結合 Spectre 輕鬆輸出文本、使用標記和創建控件如面板或樹的能力,您可以在您的終端中構建動態的 .NET 應用程式。

Tim 的演示顯示,通過 Spectre.Console,您不僅可以創建儀表板,還可以創建實時更新的表格、旋轉器等小部件。 這是將普通控制台轉化為實時互動工具的實際例子——也是向用戶說"編程愉快"的一個良好方式。

Hero Worlddot related to 屏幕上即時修改數據 - Spectre Console系列
Hero Affiliate related to 屏幕上即時修改數據 - Spectre Console系列

通過分享您所愛的東西賺得更多

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

鋼鐵支援團隊

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