backgroundworker_clr backgroundworker_backgroundworker流程

电脑杂谈  发布时间:2017-02-06 01:59:33  来源:网络整理

backgroundworker流程_clr backgroundworker_backgroundworker

BackgroundWorker是?net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。现在我们来学习一下.net开发中用BackgroundWorker实现多线程的实例,希望对大家有所帮助。

背景介绍:

在做程序的过程中,我们很可能遇到这样的情况:当我们执行一个比较耗时的操作,即界面加载数据量略大的时,在该操作未完成之前再去操作界面,就会出现停止响应的情况,这称为界面假死状态,那一个小圆圈转呀转的,想必大家看着就头疼。当然这是一个非常影响用户体验度的地方。

怎么做出一个能够及时响应的用户界面呢?多线程操作。

引入BackgroundWorker组件:

BackgroundWorker是·net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。

常用方法

1.RunWorkerAsync 开始执行后台操作。引发 DoWork 事件

2.CancelAsync 请求取消挂起的后台操作。

注意:这个方法是将 CancellationPending 属性设置为 true,并不会终止后台操作。在后台操作中要检查 CancellationPending 属性,来决定是否要继续执行耗时的操作。backgroundworker

3.ReportProgress 引发 ProgressChanged 事件。

常用属性

1.CancellationPending 指示应用程序是否已请求取消后台操作。只读属性,默认为 false,当执行了 CancelAsync 方法后,值为 true。

2.WorkerSupportsCancellation 指示是否支持异步取消。要执行 CancelAsync 方法,需要先设置该属性为 true。

3.WorkerReportsProgress 指示是否能报告进度。要执行 ReportProgress 方法,需要先设置该属性为 true。

常用事件

1.DoWork 调用 RunWorkerAsync 方法时发生。

clr backgroundworker_backgroundworker_backgroundworker流程

2.RunWorkerCompleted 后台操作已完成、被取消或引发异常时发生。

3.ProgressChanged 调用 ReportProgress 方法时发生。

注意:在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和RunWorkerCompleted 事件与用户界面进行通信。backgroundworker

如果想在 DoWork 事件处理程序中和用户界面的控件通信,可在用 ReportProgress 方法。ReportProgress(int percentProgress, object userState),可以传递一个对象。

ProgressChanged 事件可以从参数ProgressChangedEventArgs 类的UserState 属性得到这个信息对象。这个事件也可以实现进度条功能,把任务的进度实时呈现给用户。

简单的程序用BackgroundWorker 比 Thread 方便,Thread中和用户界面上的控件通信比较麻烦,需要用委托来调用控件的 Invoke 或BeginInvoke 方法,没有 BackgroundWorker 方便。

BackgroundWorkerDemo

namespace BackgroundWorkerTest

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-30790-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...