使用BackGroundWork处理大批量数据并用进度条显示进度 (转)

微软提供的backgroundWorker是个非常好的用于异步操作的组件。下面就简单说明一下使用该组件实现异步处理大批量数据并用进度条显示处理进度的功能,并提供取消功能。通过在主窗体点击按钮弹出进度条模式窗体,提示用户数据处理进度。效果图如下:

 

  

调用代码:

       private void button1_Click(object sender, EventArgs e)

        {

            this.backgroundWorker1.RunWorkerAsync();//运行backgroundWorker组件

          

 //显示进度条窗体

            ProcessForm form = new ProcessForm(this.backgroundWorker1);

            form.ShowDialog(this);

            form.Close();

      }

  

DoWork事件:在此事件中处理大批量数据
 
RunWorkerCompleted事件:无论是程序正常完成还是用户点击取消按钮,都会触发该事件
    private   void  backgroundWorker1_RunWorkerCompleted( object  sender, RunWorkerCompletedEventArgs e)
        {
            
if  (e.Error  !=   null )
            {
                MessageBox.Show(e.Error.Message);
            }
            
else   if  (e.Cancelled)
            {
            }
            
else
            {
            }
        }

 

private   void  backgroundWorker1_DoWork( object  sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker 
=  sender  as  BackgroundWorker;

            
for  ( int  i  =   0 ; i  <   100 ; i ++ )
            {
                
this .dtAll  =  DBOperator.GetDataTable( "" ); // 查询数据
                worker.ReportProgress(i);
                
if  (worker.CancellationPending)  // 如果用户取消则跳出处理数据代码
                {
                    e.Cancel 
=   true ;
                    
break ;
                }
            }
      }

 

 

 

 

ProcessForm窗体事件(进度条窗体)

  private BackgroundWorker backgroundWorker1;

        public ProcessForm(BackgroundWorker backgroundWorker1)

        {

            InitializeComponent();

            this.backgroundWorker1 = backgroundWorker1;

            this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);

            this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);

           

        }

 

        void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

            this.Close();

        }

 

        void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)

        {

            this.progressBar1.Value = e.ProgressPercentage;

        }       

 

        private void cancelButton1_Click(object sender, EventArgs e)

        {

            this.backgroundWorker1.CancelAsync();

            this.cancelButton1.Enabled = false;

            this.Close();

        }

 

完整源码请进入群下载

 


关注 - 5
粉丝 - 0
0
0
(请您对文章做出评价)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值