C#在后台运行操作:BackgroundWorker的用法
在我們的程序中,經(jīng)常會(huì)有一些耗時(shí)較長(zhǎng)的運(yùn)算,為了保證用戶體驗(yàn),不引起界面不響應(yīng),我們一般會(huì)采用多線程操作,讓耗時(shí)操作在后臺(tái)完成,完成后再進(jìn)行處理或給出提示,在運(yùn)行中,也會(huì)時(shí)時(shí)去刷新界面上的進(jìn)度條等顯示,必要時(shí)還要控制后臺(tái)線程中斷當(dāng)前操作。
以前,類似的應(yīng)用會(huì)比較麻煩,需要寫的代碼較多,也很容易出現(xiàn)異常。在.net中,提供了一個(gè)組件BackgroundWorker就是專門解決這個(gè)問(wèn)題的。BackgroundWorker類允許在單獨(dú)的專用線程上運(yùn)行操作。 耗時(shí)的操作(如下載和數(shù)據(jù)庫(kù)事務(wù))在長(zhǎng)時(shí)間運(yùn)行時(shí)可能會(huì)導(dǎo)致用戶界面(UI)似乎處于停止響應(yīng)狀態(tài)。如果需要能進(jìn)行響應(yīng)的用戶界面,而且面臨與這類操作相關(guān)的長(zhǎng)時(shí)間延遲,則可以使用BackgroundWorker類方便地解決問(wèn)題。
使用這個(gè)組件其實(shí)非常簡(jiǎn)單,例如,我們做一個(gè)類似如下界面的進(jìn)度條的小例子,在后臺(tái)線程中進(jìn)行耗時(shí)運(yùn)算,同時(shí)刷新界面上的進(jìn)度條。
過(guò)程如下:
1.新建一個(gè)windows窗體應(yīng)用程序,如:BackgroundWorkerProgressBarDemo
2.拖一個(gè)ProgressBar(progressBar1)和一個(gè)BackgroundWorker (backgroundWorker1)到Form上。
3.把下面的代碼copy過(guò)去就ok了,代碼注釋的很詳細(xì),可以按照需要修改。
若要為后臺(tái)操作做好準(zhǔn)備,請(qǐng)?zhí)砑覦oWork事件的事件處理程序,在此事件處理程序中調(diào)用耗時(shí)的操作。
若要開始此操作,請(qǐng)調(diào)用RunWorkerAsync。
若要收到進(jìn)度更新的通知,請(qǐng)?zhí)幚鞵rogressChanged 事件。
若要在操作完成時(shí)收到通知,請(qǐng)?zhí)幚鞷unWorkerCompleted 事件。
注意:
您必須非常小心,確保在 DoWork 事件處理程序中不操作任何用戶界面對(duì)象。 而應(yīng)該通過(guò) ProgressChanged 和 RunWorkerCompleted 事件與用戶界面進(jìn)行通信。
BackgroundWorker 事件不跨 AppDomain 邊界進(jìn)行封送處理。 請(qǐng)不要使用 BackgroundWorker 組件在多個(gè) AppDomain 中執(zhí)行多線程操作。
如果后臺(tái)操作需要參數(shù),請(qǐng)?jiān)谡{(diào)用 RunWorkerAsync 時(shí)給出參數(shù)。 在 DoWork 事件處理程序內(nèi)部,可以從 DoWorkEventArgs.Argument 屬性中提取該參數(shù)。
參考:
http://msdn.microsoft.com/zh-cn/library/vstudio/System.ComponentModel.BackgroundWorker(v=vs.100).aspx
轉(zhuǎn)載于:https://www.cnblogs.com/ChineseMoonGod/p/5254502.html
總結(jié)
以上是生活随笔為你收集整理的C#在后台运行操作:BackgroundWorker的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MVC下HtmlHelper自带Begi
- 下一篇: 单点登录认证方案思路,求好思路回复