原創|行業資訊|編輯:董玉霞|2022-09-08 16:47:38.650|閱讀 201 次
概述:本文將為大家介紹具有 LightningChart.NET數據可視化控件的多線程應用程序。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
本文將為大家介紹具有 LightningChart.NET數據可視化控件的多線程應用程序。
使用后臺線程讓應用程序平穩運行確實會產生很大的不同。
將非必要進程卸載到一個或多個后臺線程有助于保持應用程序的 UI 響應迅速。
但是,與單線程程序相比,多線程程序需要更多的精力來開發。線程的粗心使用是導致細微錯誤的一個重要原因,這可能需要花費大量時間來定位。
本文旨在幫助理解多線程圖表應用程序并解釋 .NET 多線程的一些概念,特別是應如何在多線程程序中使用圖表控件LightningChart .NET 。
這是一個例子:
大多數操作系統對涉及用戶界面的代碼使用單線程模型。該模型對于正確排序用戶界面事件(包括擊鍵和觸摸輸入)是必要的。
該線程通常稱為主線程、用戶界面線程或UI 線程。嚴格來說,.NET對前景和背景的分類是不同的。
但在本文中,我們將非 UI 線程稱為后臺線程。
了解多線程圖表應用程序可以提高應用程序的性能,但對 UI 控件的訪問本身并不是線程安全的。
多線程可以將您的代碼暴露給嚴重和復雜的錯誤。操作控件的兩個或多個線程可能會強制控件進入不一致的狀態并導致競爭條件、訪問沖突、死鎖以及凍結或掛起。
如果您在應用程序中實現多線程,請確保您以線程安全的方式調用跨線程控件。
UI 庫(Windows 窗體、WPF 和 UWP)的設計方式是只能從 UI 線程訪問 UI 元素。Windows 這樣做是為了確保 UI 控件的完整性。
LightningChart® .NET 控件是一個 UI 元素。因此,適用相同的線程安全規則。與其他所有 UI 控件一樣,它要求所有 LightningChart 屬性都應在UI 線程中更新。
在應用程序中使用后臺線程時,來自線程的所有 UI 更新都必須通過Invoke(WinForms 中的Control.Invoke()和 WPF 中的Dispatcher.Invoke())。這兩種方法都安排一個委托執行。
WPF 調度程序更加靈活,因為它允許用戶在向調度程序隊列添加元素時指定隊列優先級。
這種多線程應用程序設計在我們的演示中的以下ExampleThreadMultiChannel中進行了演示。
我們經常使用這種設計,因為它非常適合在多個線程上分配計算以及盡可能快地更新圖表。
這個想法是有一個后臺線程來讀取/收集/生成新數據并通過Invoke()調用推送一些“新點” 。
演示(交互式示例應用程序)示例顯示了線程安全圖表更新和后臺線程用于數據生成的使用情況。
LightningChart 渲染的原理很簡單。每當用戶添加數據(或修改屬性)時,都會呈現圖表。
該過程涉及大量處理,包括并行循環計算、對象處置、相關屬性的更新、對象的重新創建等。
出于這個原因,只有一個線程應該更新和讀取圖表——串行/同步執行。
這是客戶端對消息的內部操作的示意圖,其中顯示了命名管道和后臺線程。
對于標準桌面應用程序,LightningChart 線程與主 UI 線程相同。但是,該線程不一定是主 UI 線程。
Headless 模式允許圖表在后臺線程中運行,但所有更新都應通過創建圖表的同一線程。
另一個用例是,例如,當應用程序可能有多個窗口,并且每個窗口可能有自己的線程時。對于這種情況,LightningChart 被允許使用它被添加到的窗口的線程(這可能是與在主應用程序窗口上運行的線程不同的線程)。
這種設計在我們的測試臺示例中實現,如下圖所示:
多窗口——多線程方法。
值得注意的是,Dispatcher/Control 有兩個類似的方法:Invoke() 和 BeginInvoke()。這兩種方法都安排一個委托執行。
另一方面(在 LightningChart .NET 的情況下)通過BeginInvoke 更新圖表,用戶立即獲得響應式 UI。
然而,另一方面,當實際渲染發生時,應用程序的信息有限。通過更改圖表更新類型可以實現類似的效果,其中:
LightningChart 是一個 UI 元素。因此,為了線程安全,應在UI Thread中更新所有 LightningChart 屬性。歡迎加入LightningChart技術交流群,獲取最新產品咨詢:740060302
想要了解或購買LightningChart 正版授權的朋友,歡迎咨詢。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn