BackgroundWorker用法示例

打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

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

  • DoWork: 在程序中调用RunWorkerAsync会启动DoWork事件处理。
  • ProgressChanged: 在事件处理过程中,调用ReportProgress方法则会启动ProgressChanged事件的事件处理。
  • RunWorkerCompleted: 当DoWork事件处理完成时,则会触发RunWorkerCompleted事件。
  • 注意:在DoWork事件处理程序中不操作任何用户界面对象,否则会停止响应。应该通过ProgressChanged和RunWorkerCompleted事件与用户界面进行通信。
4.示例:
[code] 1 using System; 2 using System.ComponentModel; 3 using System.Threading; 4 using System.Windows.Forms; 5   6 namespace bcworker 7 { 8     public partial class Form1 : Form 9     {10         //后台工作11         private BackgroundWorker bw = new BackgroundWorker();12  13         public Form1()14         {15             InitializeComponent();16             //后台工作初始化17             bw.WorkerReportsProgress = true;//报告进度18             bw.WorkerSupportsCancellation = true;//支持取消19             bw.DoWork += new DoWorkEventHandler(bgWorker_DoWork);//开始工作20             bw.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged);//进度改变事件21             bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted);//进度完成事件22         }23  24         private void btnStart_Click(object sender, EventArgs e)25         {26             //后台工作运行中,避免重入27             if (bw.IsBusy) return;28             bw.RunWorkerAsync("参数");//触发DoWork事件并异步执行,IsBusy置为True29         }30         //后台工作将异步执行31         public void bgWorker_DoWork(object sender, DoWorkEventArgs e)32         {33             //(string)e.Argument == "参数";34             for (int i = 0; i
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表