ITPub博客

首页 > Linux操作系统 > Linux操作系统 > backgroundWorker

backgroundWorker

原创 Linux操作系统 作者:fangqm 时间:2011-04-01 10:43:36 0 删除 编辑
简介
三个事件与工作原理
   当调用 this.backgroundWorker1.RunWorkerAsync();才会触发
      private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            //我是专用来处理耗时的任务
            //我不能去操作窗体上的控件,如果需要让ProgressChanged和RunWorkerCompleted事件中去做
        }
               
   当调用//报告进度this.backgroundWorker1.WorkerReportsProgress = true;   才会触发
         private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
         {
             //在处理耗时的任务时,需要做的事,可以让我来完成
            //比如操作窗体上的控件lbl.text=e.Result.ToString();//得到汇报对象值
            //但前提是耗时操作中要汇报this.backgroundWorker1.ReportProgress(进度百分比,汇报的对象);//汇报进度
         }
         private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
         {
             //耗时的任务完成了,接下来要做什么
         }
 
重要属性:
    1、CancellationPending获取一个值,指示应用程序是否已请求取消后台操作。通过在DoWork事件中判断CancellationPending属性可以认定是否需要取消后台操作(也就是结束线程);
    2、IsBusy获取一个值,指示 BackgroundWorker 是否正在运行异步操作。程序中使用IsBusy属性用来确定后台操作是否正在使用中;
    3、WorkerReportsProgress获取或设置一个值,该值指示BackgroundWorker能否报告进度更新
    4、WorkerSupportsCancellation获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。设置WorkerSupportsCancellation为true使得程序可以调用CancelAsync方法提交终止挂起的后台操作的请求;
    重要方法:
    1、CancelAsync请求取消挂起的后台操作
    2、RunWorkerAsync开始执行后台操作
    3、ReportProgress引发ProgressChanged事件  
工作流程
 
 
backgroundworker多线程操作
http://msdn.microsoft.com/zh-cn/library/ywkkz4s1.aspx

主要处理如下几个事件和方法:

        1. RunWorkerAsync方法

        开始执行异步操作,可以将执行异步操作的参数通过方法参数传入;

        2. DoWork事件

        RunWorkerAsync方法触发该事件,在这里执行耗时的操作。同时判断用户是否取消耗时的后台操作,                                                                                                                                                                        

      if(worker.CancellationPending)
       {  
              e.Cancel = true;                                                                                                                               }

       并用ReportProgress方法报告进度消息。在初始化BackgroundWorker组件前,需要设置WorkerReportsProgress属性为True。


        确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。

       3. ProgressChanged事件

       ReportProgress方法触发该事件,在这里处理进度消息,如更新进度条,以及报告用户当前处理消息,可以采用ProgressChangedEventArgs类型的参数的UserState来传递参数。

       4. RunWorkerCompleted事件

       当耗时操作(后台操作)执行完后,触发该事件。在这里处理操作执行完后的后续操作。

            if (e.Error != null) // 如果出现错误
            {
                MessageBox.Show(e.Error.Message);
            }
            else if (e.Cancelled) // 如果用户中途取消
            {

            }
            else // 成功执行
            {

            }

       5. 如果想中途结束后台操作,在某个按钮的单击事件中执行以下操作:

            backgroundWorker1.CancelAsync();

backgroundworker.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23109131/viewspace-691449/,如需转载,请注明出处,否则将追究法律责任。

上一篇: ListBox
请登录后发表评论 登录
全部评论

注册时间:2010-03-24

  • 博文量
    298
  • 访问量
    729541