多线程---BackgroundWorker

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 事件进行处理。

 

 

[转]线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它

原因:用到了多线程,只能从创建控件的线程来更新控件

解决办法:

方法一

this.Invoke((MethodInvoker)delegate { richTextBox1.AppendText(ccc + "/r/n"); });

简单的方法
在窗体LOAD里加 System::Windows::Forms::Control::CheckForIllegalCrossThreadCalls = false;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值