简介
三个事件与工作原理
当调用 this.backgroundWorker1.RunWorkerAsync();才会触发
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//我是专用来处理耗时的任务
//我不能去操作窗体上的控件,如果需要让ProgressChanged和RunWorkerCompleted事件中去做
}
当调用//报告进度this.backgroundWorker1.WorkerReportsProgress = true; 才会触发
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//在处理耗时的任务时,需要做的事,可以让我来完成
//比如操作窗体上的控件lbl.text=e.Result.ToString();//得到汇报对象值
//但前提是耗时操作中要汇报this.backgroundWorker1.ReportProgress(进度百分比,汇报的对象);//汇报进度
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//耗时的任务完成了,接下来要做什么
}
重要属性:
1、CancellationPending获取一个值,指示应用程序是否已请求取消后台操作。通过在DoWork事件中判断CancellationPending属性可以认定是否需要取消后台操作(也就是结束线程);
2、IsBusy获取一个值,指示 BackgroundWorker 是否正在运行异步操作。程序中使用IsBusy属性用来确定后台操作是否正在使用中;
3、WorkerReportsProgress获取或设置一个值,该值指示BackgroundWorker能否报告进度更新
4、WorkerSupportsCancellation获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。设置WorkerSupportsCancellation为true使得程序可以调用CancelAsync方法提交终止挂起的后台操作的请求;
重要方法:
1、CancelAsync请求取消挂起的后台操作
2、RunWorkerAsync开始执行后台操作
3、ReportProgress引发ProgressChanged事件
工作流程

backgroundworker多线程操作
主要处理如下几个事件和方法:
1. RunWorkerAsync方法
开始执行异步操作,可以将执行异步操作的参数通过方法参数传入;
2. DoWork事件
RunWorkerAsync方法触发该事件,在这里执行耗时的操作。同时判断用户是否取消耗时的后台操作,
if(worker.CancellationPending) { e.Cancel = true; }
并用ReportProgress方法报告进度消息。在初始化BackgroundWorker组件前,需要设置WorkerReportsProgress属性为True。
确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。
3. ProgressChanged事件
ReportProgress方法触发该事件,在这里处理进度消息,如更新进度条,以及报告用户当前处理消息,可以采用ProgressChangedEventArgs类型的参数的UserState来传递参数。
4. RunWorkerCompleted事件
当耗时操作(后台操作)执行完后,触发该事件。在这里处理操作执行完后的后续操作。
if (e.Error != null) // 如果出现错误 { MessageBox.Show(e.Error.Message); } else if (e.Cancelled) // 如果用户中途取消 {
} else // 成功执行 {
}
5. 如果想中途结束后台操作,在某个按钮的单击事件中执行以下操作:
backgroundWorker1.CancelAsync(); |
backgroundworker.jpg
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23109131/viewspace-691449/,如需转载,请注明出处,否则将追究法律责任。