zoukankan      html  css  js  c++  java
  • C#如何使用BackgroundWork后台辅助线程控件

    转载自 http://www.cnblogs.com/goldkevin/archive/2009/10/26/1589856.html

    backgroundWork 有3个事件:

    this.backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
    this.backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
    this.backgroundWorker.ProgressChanged +=new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
    我们一般把要做的耗时动作放在DoWork里面,例如:
     /// <summary>
            /// 后台操作
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
            {
                this.backgroundWorker.ReportProgress(100"系统正在根据您的查询条件取数据");
                DoSome();//取数据源动作            
                if (this.dt.Rows.Count == 0)//数据源为空
                {
                    this.backgroundWorker.CancelAsync();
                }
                this.backgroundWorker.ReportProgress(100"数据已经取得,正在进行Excel数据导入");            
                ExportExcel();//导入Excel中
                this.backgroundWorker.ReportProgress(100"Excel导入已经完成");    
            }

     在上面的Dowork事件中,用到了ReportProgress事件,要使用此事件,必须把属性:this.backgroundWorker.WorkerReportsProgress = true;

    另外也把属性: this.backgroundWorker.WorkerSupportsCancellation = true; 这个属性支持辅助线程的取消。在ReportProgress中可以把程序进度反馈给UI:

            /// <summary>
            /// 当处理情况发生变化时
             /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {          
                message.label.Text = e.UserState.ToString();    //这里的message是我新做的窗体Form,用来提示相关信息   
            }

    然后操作完成:

    /// <summary>         

    /// 操作完成          

    /// </summary>         

    /// <param name="sender"></param>        

     /// <param name="e"></param>         

    private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)         

    {      if (e.Cancelled)            

           {   MessageBox.Show("查询条件有误,请重新选择条件!");               

               return;          

           }             

           else          

           {

              message.Hide();          

           }         

    }

  • 相关阅读:
    获得指定目录路径
    播放音乐(mciSendString)
    INotifyPropertyChanged接口
    从excel表格加载数据返回DataSet
    事件与委托
    .net中实现伪静态的学习小结
    今天开通博客了
    EasyUI后台管理系统学习四
    EasyUI后台管理系统学习三
    EasyUI后台管理系统学习二
  • 原文地址:https://www.cnblogs.com/TJessica/p/6673819.html
Copyright © 2011-2022 走看看