Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13030423
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类:

2012-05-18 18:35:26

一、BackgroundWorker是什么?


   BackgroundWorker是.net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 始终处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。

 

二、该控件有三个事件:


   DoWork 、ProgressChanged 和 RunWorkerCompleted。


  1. worker.DoWork += new DoWorkEventHandler(worker_DoWork); //执行任务
  2. worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);//任务结束时
  3. worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged)

(1)在程序中调用RunWorkerAsync方法则会启动DoWork事件的事件处理:

      当在事件处理过程中,调用 ReportProgress方法则会启动ProgressChanged事件的事件处理。

(2)当DoWork事件处理完成时,则会触发RunWorkerCompleted事件。

您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged和 RunWorkerCompleted 事件与用户界面进行通信。

 


三、控件常用的几个属性


  先介绍一下backgroundworker的几个属性/方法 



  1. (1)WorkerReportsProgress:是否可以向外报告进度。
  2. (2)WorkerSupportsCancellation :是否可以暂停任务

  3. (3)CancellationPending: 是否正在暂停中
  4. (4)RunWorkerAsync() : 开始执行任务。触发DoWork事件
  5. (5)ReportProgress(int percentPrgress,object userState) :
  6.      向外报告进度。触发ProgressChanged事件.其中,参数可以在ProgressChangedEventArgs

  7. (6)worker_ProgressChanged(object sender, ProgressChangedEventArgs e))中得到; 
  8. (7)CancelAsync() :取消(暂停)执行。




阅读(2357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~