VS2005中BackgroundWorker组件的使用经验
在VS2005中添加了BackgroundWorker组件,该组件在多线程编程方面使用起来非常方便,然而在开始时由于没有搞清楚它的使用机制,走了不少的弯路,现在把我在使用它的过程中的经验与诸位分享一下。
BackgroundWorker类中主要用到的有这列属性、方法和事件:
重要属性:
1、CancellationPending 获取一个值,指示应用程序是否已请求取消后台操作。通过在DoWork事件中判断CancellationPending属性可以认定是否需要取消后台操作(也就是结束线程);
2、IsBusy 获取一个值,指示 BackgroundWorker 是否正在运行异步操作。程序中使用IsBusy属性用来确定后台操作是否正在使用中;
3、WorkerReportsProgress 获取或设置一个值,该值指示BackgroundWorker能否报告进度更新;
4、WorkerSupportsCancellation 获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。设置WorkerSupportsCancellation为true使得程序可以调用CancelAsync方法提交终止挂起的后台操作的请求;
重要方法:
1、CancelAsync 请求取消挂起的后台操作
2、RunWorkerAsync 开始执行后台操作
3、ReportProgress 引发ProgressChanged事件
重要事件:
1、DoWork 调用 RunWorkerAsync 时发生
2、ProgressChanged 调用 ReportProgress 时发生
3、RunWorkerCompleted 当后台操作已完成、被取消或引发异常时发生
另外还有三个重要的参数是RunWorkerCompletedEventArgs以及DoWorkEventArgs、ProgressChangedEventArgs。
BackgroundWorker的各属性、方法、事件的调用机制和顺序:
从上图可见在整个生活周期内发生了3次重要的参数传递过程:
参数传递1:此次的参数传递是将RunWorkerAsync(Object)中的Object传递到DoWork事件的DoWorkEventArgs.Argument,由于在这里只有一个参数可以传递,所以在实际应用往封装一个类,将整个实例化的类作为RunWorkerAsync的Object传递到DoWorkEventArgs.Argument;
参数传递2:此次是将程序运行进度传递给ProgressChanged事件,实际使用中往往使用给方法和事件更新进度条或者日志信息;
参数传递3:在DoWork事件结束之前,将后台线程产生的结果数据赋给DoWorkEventArgs.Result一边在RunWorkerCompleted事件中调用RunWorkerCompletedEventArgs.Result属性取得后台线程产生的结果。
另外从上图可以看到DoWork事件是在后台线程中运行的,所以在该事件中不能够操作用户界面的内容,如果需要更新用户界面,可以使用ProgressChanged事件及RunWorkCompleted事件来实现。
明白了BagkgroundWorker的事件调用顺序和参数传递机制之后在使用该组件用于多线程编程的时候就可以轻松许多了。详细的实例可以在我写的天涯离线浏览器中看到。
分享到:
相关推荐
在.NET中,我们有两种主要的方式来实现后台任务并更新UI:BackgroundWorker组件和直接使用Thread。接下来,我们将详细探讨这两种方法及其特点。 **BackgroundWorker组件** BackgroundWorker是.NET Framework提供的...
使用BackgroundWorker组件进行异步操作编程代码,更多可以查看下面链接。 http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx
本例子将深入讲解如何正确使用BackgroundWorker组件,包括其主要属性、方法和事件。 首先,BackgroundWorker组件有以下几个关键属性: 1. **IsBusy**:这个布尔属性用于检查BackgroundWorker是否正在执行工作。当...
1. **添加BackgroundWorker组件** 在Winform设计界面,从工具箱中找到`BackgroundWorker`组件并将其拖放到窗体上。在属性窗口中,可以设置其事件处理程序,如`DoWork`、`ProgressChanged`和`RunWorkerCompleted`。 ...
在VB.NET编程中,`BackgroundWorker`组件是一个非常重要的工具,它允许我们在应用程序的主线程之外执行耗时操作,防止用户界面(UI)线程被阻塞,从而保持UI的响应性。`BackgroundWorker`是.NET框架提供的一种异步...
为了解决这个问题,我们可以使用`BackgroundWorker`组件来实现异步处理。本主题将详细探讨如何使用`BackgroundWorker`来刷新`dataGridView`的行,以及它在WinForm中的工作原理。 `BackgroundWorker`是.NET ...
本篇文章将详细探讨如何使用`BackgroundWorker`组件来实现异步操作。 首先,`BackgroundWorker`组件是一种控件,可以在不同的线程上执行工作,而不会阻塞主线程,即UI线程。这在处理大量数据计算、网络通信或其他...
在.NET框架中,BackgroundWorker组件是一个非常实用的工具,它允许在不同的线程上执行耗时的操作,同时保持用户界面(UI)的响应性。在标题为"关于backgroundworker的使用方法"的描述中,提到使用BackgroundWorker来...
在.NET框架中,BackgroundWorker组件是一个非常实用的工具,它使得在用户界面(UI)线程上执行耗时操作变得更加简单。本篇文章将详细介绍如何使用BackgroundWorker,以及它在多线程编程中的重要性。 首先,理解背景...
在VB.NET编程中,`BackgroundWorker`组件是一个非常重要的工具,它允许我们在应用程序的后台线程上执行耗时操作,而不会阻塞用户界面(UI)。这样,即使在执行大量计算或I/O操作时,用户仍能与应用程序交互。本教程...
`BackgroundWorker` 是 .NET 框架提供的一种用于实现后台操作的组件,特别适合在 Visual Studio(如 VS 2008)这样的开发环境中使用。它的主要优点在于能够在不影响主线程的情况下执行耗时任务,从而保持用户界面的...
在C#编程中,`BackgroundWorker`组件是一个非常重要的工具,它允许我们在应用程序的主线程之外执行耗时操作,防止用户界面(UI)冻结。在本篇内容中,我们将深入探讨`BackgroundWorker`的使用方法,以及如何结合`...
【C# BackgroundWorker组件学习入门】 在C#编程中,有时我们需要执行一些耗时的任务,比如大数据处理、网络通信或者文件操作等。这些任务如果在主线程上执行,会导致用户界面(UI)变得无响应,影响用户体验。为了解决...
BackgroundWorker组件是.NET框架中一个非常实用的工具,主要用于在UI线程之外执行耗时操作,从而避免阻塞用户界面。这个组件使得开发者能够轻松地实现异步编程,确保应用程序的响应性和用户体验。下面我们将详细探讨...
`BackgroundWorker`是.NET Framework中一个非常实用且易于使用的组件,它为开发者提供了优雅的方式来处理耗时任务,同时保持UI的响应性。通过合理利用`DoWork`、`ProgressChanged`和`RunWorkerCompleted`事件,以及...
通过这个例子,我们可以学习到如何在.NET环境中有效地使用BackgroundWorker组件来创建响应式的用户界面,同时处理复杂的后台任务。了解和掌握BackgroundWorker,对于任何.NET开发者来说都是一个重要的技能,特别是在...
"BackgroundWorker"是C#中一个非常有用的组件,它允许开发者在UI线程之外执行耗时操作,确保用户界面的响应性。在Android和iOS平台上,虽然没有直接对应的BackgroundWorker类,但它们提供了类似的概念和技术来实现...
`BackgroundWorker`组件是.NET Framework提供的一种简单而有效的方式,用于在单独的线程上执行耗时操作,同时允许用户界面(UI)保持响应。下面将详细阐述`BackgroundWorker`的使用,包括如何控制其开始、暂停、继续...