C#之BackgroundWorker從簡單入門到深入精通的用法總結

C#之BackgroundWorker從簡單入門到深入精通的用法總結
需求分析

經常用到的耗時操作,例如:

1、文件下載和上載(包括點對點應用程序傳輸文件,從網絡下載文件、圖像等)
2、數據庫事務(從數據庫讀到大量的數據到WinForm界面中的DataGridview裏呈現)
3、複雜的本地計算
4、本地磁盤文件訪問(讀寫文件,磁盤文件列表)
……

這些操作在長時間運行時會導致用戶界面 (UI) 處於停止響應狀態,用戶在這操作期間無法進行其他的操作,造成非常差的用戶體驗,爲了不使UI層處於停止響應狀態,則可以使用 BackgroundWorker 類方便地解決這類問題。這個後臺的線程處理,可以很好的實現常規操作的同時,還可以及時通知UI當前處理信息的進度等。

MSDN的介紹

BackgroundWorker是.NET Framework 裏用來執行多線程任務的控件,它允許開發人員在一個單獨的線程上執行一些操作。耗時的操作(如下載和數據庫事務)在長時間運行時可能會導致用戶界面 (UI) 似乎處於停止響應狀態。 如果您需要能進行響應的用戶界面,而且面臨與這類操作相關的長時間延遲,則可以使用 BackgroundWorker 類方便地解決問題。

若要在後臺執行耗時的操作,請創建一個 BackgroundWorker,偵聽那些報告操作進度並在操作完成時發出信號的事件。 可以通過編程方式創建 BackgroundWorker,也可以將它從“工具箱”的“組件”選項卡中拖到窗體上。 如果在 Windows 窗體設計器中創建 BackgroundWorker,則它會出現在組件欄中,而且它的屬性會顯示在“屬性”窗口中。

若要爲後臺操作做好準備,請添加 DoWork 事件的事件處理程序。 在此事件處理程序中調用耗時的操作。 若要開始此操作,請調用 RunWorkerAsync。 若要收到進度更新的通知,請處理 ProgressChanged 事件。 若要在操作完成時收到通知,請處理 RunWorkerCompleted 事件。

有2點需要注意的:

1、由於DoWork事件內部的代碼運行在非UI線程之上,確保在 DoWork 事件處理程序中不操作任何用戶界面對象。 而應該通過 ProgressChanged 和 RunWorkerCompleted 事件與用戶界面進行通信。
2、BackgroundWorker 事件不跨 AppDomain 邊界進行封送處理。 請不要使用 BackgroundWorker 組件在多個 AppDomain 中執行多線程操作。
原文地址https://www.cnblogs.com/netserver/p/11363080.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章