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

其他類別

實時修改螢幕上的資料 - Spectre Console 系列

[[academy-video-youtube({"vid": "hG5_h1JKtPs", "start_time": "0", "title": "Modifying Data Live On-Screen - Spectre Console Series", "creator": "Tim Corey", "length": "9m 17s"})]]

Spectre.Console 是一個 .NET 程式庫,讓您可以建立遠遠超過單色命令列的精美主控台應用程式。在他的影片 "Modifying Data Live On-Screen – Spectre Console Series" 中,Tim Corey 顯示了 Spectre Console 的即時顯示功能。 此功能讓您可以在主控台應用程式中即時顯示進度並更新螢幕上的資料。

在本文中,我們將逐步介紹 Tim 的影片,了解他在哪裡完成每項工作,以及他如何解釋這些工作。

即時顯示介紹

Tim 開始講解 Spectre.Console 以及如何使您的主控台應用程式視覺上更吸引人。 在本系列中,每課都是一個簡短的範例,並且在說明中有來源程式碼的連結。

他解釋說,此課程重點於如何使用即時顯示功能來修改螢幕上的現有資料以進行即時更新。 Tim 也鼓勵觀眾訂閱並造訪 iamtimcorey.com 以獲得更多培訓資源。

為資料建立新表格

Tim 表示他已經建立了一個包含標題、課程和時數列的新表格。 這張表格將用於顯示從 API 提取的課程資訊。

他還介紹了一個記錄型別,稱為 CourseInfo,具有課程名稱、課時數量和課程時長(以小時為單位)的強型別屬性。 這反映了 API 的結構,讓他可以很輕鬆地以強型別的方式輸出文字。

表格已開啟顯示頁尾,以便稍後顯示總計。 Tim 指出,這種佈局是 Spectre 支援的眾多任意小部件之一,可用於建立美觀的主控台應用程式。

開始即時顯示

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

他在異步上下文中封裝了他的程式碼,以便在有新行抵達時主控台可以刷新。這示範了當前終端如何能在不清除螢幕的情況下重繪輸出。

提取資料和顯示進度

在即時上下文中,Tim 使用一個 int 索引寫了一個從 1 到 31 的 for 迴圈,因為樣本 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 的開發者建立內容?將您的專業知識轉化為額外收入!

Iron 支援團隊

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