一、BackgroundWorker是什么?
BackgroundWorker是.net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 始终处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。
二、该控件有三个事件:
DoWork 、ProgressChanged 和 RunWorkerCompleted。
- worker.DoWork += new DoWorkEventHandler(worker_DoWork); //执行任务
- worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);//任务结束时
- worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged)
(1)在程序中调用RunWorkerAsync方法则会启动DoWork事件的事件处理:
当在事件处理过程中,调用 ReportProgress方法则会启动ProgressChanged事件的事件处理。
(2)当DoWork事件处理完成时,则会触发RunWorkerCompleted事件。
您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged和 RunWorkerCompleted 事件与用户界面进行通信。
三、控件常用的几个属性
先介绍一下backgroundworker的几个属性/方法
- (1)WorkerReportsProgress:是否可以向外报告进度。
- (2)WorkerSupportsCancellation :是否可以暂停任务
- (3)CancellationPending: 是否正在暂停中
- (4)RunWorkerAsync() : 开始执行任务。触发DoWork事件
- (5)ReportProgress(int percentPrgress,object userState) :
- 向外报告进度。触发ProgressChanged事件.其中,参数可以在ProgressChangedEventArgs
- (6)worker_ProgressChanged(object sender, ProgressChangedEventArgs e))中得到;
- (7)CancelAsync() :取消(暂停)执行。