天天看点

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 事件处理程序。

在窗体的代码中,用下列代码替换现有代码。

继续阅读