BackgroundWorker 事件有三个:
DoWork 调用 RunWorkerAsync()方法时引发
ProgressChanged 调用 ReportProgress()方法时引发
RunWorkerCompleted 当后台操作已完成、被取消或引发异常时引发
1) BackgroundWorker.DoWork
在此,将耗时的工作写在DoWork下进行后台运行。
DoWork 事件处理程序中的代码应定期检查 CancellationPending 属性值,判定是否终止操作。
当终止操作时,System.ComponentModel.DoWorkEventArgs 的 Cancel 标志设置为 true。同时,将事件RunWorkerCompleted 中System.ComponentModel.RunWorkerCompletedEventArgs的Cancelled 设置为 true。
如果操作产生了结果,则将结果分配给 DoWorkEventArgs.Result 属性( e->Result );
此结果还可用于RunWorkerCompletedEventArgs.Result 属性中的 RunWorkerCompleted 事件处理程序。
2) BackgroundWorker. ProgressChanged 如果需要后台操作报告其进度,则可以调用 ReportProgress 方法来引发 ProgressChanged 事件。
public void ReportProgress ( int percentProgress );
public void ReportProgress ( int percentProgress, object userState );
percentProgress 代表当前进度,范围从0-100.
进度值为: e->ProgressPercentage
将DoWork正在运行时的进度显示等相关处理写在这里,其中进度值为:e->ProgressPercentage。
3) BackgroundWorker.RunWorkerCompleted
当后台操作已完成、被取消或引发异常时发生RunWorkerCompleted事件。
将DoWork完成后,其他的相关处理显示等操作写在这里,如果需要处理的结果,则调用e->Result。
BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。
若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。若要设置后台操作,请为 DoWork 事件添加一个事件处理程序。在此事件处理程序中调用耗时的操作。若要启动该操作,请调用 RunWorkerAsync。若要收到进度更新通知,请对 ProgressChanged 事件进行处理。若要在操作完成时收到通知,请对 RunWorkerCompleted 事件进行处理。
原因:用到了多线程,只能从创建控件的线程来更新控件 解决办法: 方法一 this.Invoke((MethodInvoker)delegate { richTextBox1.AppendText(ccc + "/r/n"); }); |