天天看點

C#中的BackgroundWorker控件

Keywords: C# .NET BackgroundWorker

BackgroundWorker是.NET Framework 裡用來執行多線程任務的控件,它允許開發人員在一個單獨的線程上執行一些操作。耗時的操作(如下載下傳和資料庫事務)在長時間運作時可能會導緻使用者界面 (UI) 始終處于停止響應狀态。如果您需要能進行響應的使用者界面,而且面臨與這類操作相關的長時間延遲,則可以使用 BackgroundWorker 類友善地解決問題。

若要在背景執行耗時的操作,請建立一個 BackgroundWorker,偵聽那些報告操作進度并在操作完成時發出信号的事件。 可以通過程式設計方式建立 BackgroundWorker,也可以将它從“工具箱”的“元件”頁籤中拖到窗體上。 如果在 Windows 窗體設計器中建立 BackgroundWorker,則它會出現在元件欄中,而且它的屬性會顯示在“屬性”視窗中。 

名稱

說明

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.backgroundworker(v=vs.100).aspx">BackgroundWorker</a>

初始化 BackgroundWorker 類的新執行個體。

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.cancellationpending(v=vs.100).aspx">CancellationPending</a>

擷取一個值,訓示應用程式是否已請求取消背景操作。

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.canraiseevents(v=vs.100).aspx">CanRaiseEvents</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.container(v=vs.100).aspx">Container</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.designmode(v=vs.100).aspx">DesignMode</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.events(v=vs.100).aspx">Events</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.isbusy(v=vs.100).aspx">IsBusy</a>

擷取一個值,訓示 BackgroundWorker 是否正在運作異步操作。

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.site(v=vs.100).aspx">Site</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.workerreportsprogress(v=vs.100).aspx">WorkerReportsProgress</a>

擷取或設定一個值,該值訓示 BackgroundWorker 能否報告進度更新。

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.workersupportscancellation(v=vs.100).aspx">WorkerSupportsCancellation</a>

擷取或設定一個值,該值訓示 BackgroundWorker 是否支援異步取消。

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.cancelasync(v=vs.100).aspx">CancelAsync</a>

請求取消挂起的背景操作。

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.marshalbyrefobject.createobjref(v=vs.100).aspx">CreateObjRef</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/3cc9y48w(v=vs.100).aspx">Dispose()</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/d9yzd5cx(v=vs.100).aspx">Dispose(Boolean)</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/bsc2ak47(v=vs.100).aspx">Equals(Object)</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/az5741fh(v=vs.100).aspx">Finalize</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode(v=vs.100).aspx">GetHashCode</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.marshalbyrefobject.getlifetimeservice(v=vs.100).aspx">GetLifetimeService</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.getservice(v=vs.100).aspx">GetService</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.object.gettype(v=vs.100).aspx">GetType</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.marshalbyrefobject.initializelifetimeservice(v=vs.100).aspx">InitializeLifetimeService</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.object.memberwiseclone(v=vs.100).aspx">MemberwiseClone()</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/ms131262(v=vs.100).aspx">MemberwiseClone(Boolean)</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.ondowork(v=vs.100).aspx">OnDoWork</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.onprogresschanged(v=vs.100).aspx">OnProgressChanged</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.onrunworkercompleted(v=vs.100).aspx">OnRunWorkerCompleted</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/ka89zff4(v=vs.100).aspx">ReportProgress(Int32)</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/a3zbdb1t(v=vs.100).aspx">ReportProgress(Int32, Object)</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/h01xszh2(v=vs.100).aspx">RunWorkerAsync()</a>

開始執行背景操作。

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/f00zz5b2(v=vs.100).aspx">RunWorkerAsync(Object)</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/z819d1t5(v=vs.100).aspx">ToString</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.disposed(v=vs.100).aspx">Disposed</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.dowork(v=vs.100).aspx">DoWork</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.progresschanged(v=vs.100).aspx">ProgressChanged</a>

C#中的BackgroundWorker控件

<a href="http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.runworkercompleted(v=vs.100).aspx">RunWorkerCompleted</a>

當背景操作已完成、被取消或引發異常時發生。

本代碼運作環境:Windows XP, Visual Studio 2010, .NET Framework 4, C#

下面的代碼示例示範 BackgroundWorker 類異步執行耗時的基本知識。 下圖顯示輸出的示例。

C#中的BackgroundWorker控件

要嘗試該代碼,可建立 Windows 窗體應用程式。 添加一個名為 resultLabel 的 Label 控件并添加兩個名為 startAsyncButton 和 cancelAsyncButton 的 Button 控件。 建立這兩個按鈕的 Click 事件處理程式。 從工具箱中的“元件”頁籤中,添加命名為 backgroundWorker1 的 BackgroundWorker 元件。 建立 DoWork、 ProgressChanged 和 BackgroundWorker 的 RunWorkerCompleted 事件處理程式。

在窗體的代碼中,用下列代碼替換現有代碼。

繼續閱讀