码迷,mamicode.com
首页 > 其他好文 > 详细

BackgroundWorker组件使用总结

时间:2014-05-08 12:17:23      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   

首先在窗体拖入一个BackgroundWorker组件,根据功能需要设置BackgroundWorker的属性

WorkerSupportsCancellation = true; 允许取消后台正在执行的操作

WorkerReportsProgress = true;  允许显示后台操作的执行进度(主要作用是与主窗体交互,解决了“不允许跨线程访问控件”之类的错误)

 

1、开始执行后台操作

在执行后台操作的地方调用BackgroundWorker组件的RunWorkerAsync()方法,该方法执行时会触发BackgroundWorker组件的DoWork 事件。所以接下来添加BackgroundWorker组件的DoWork 事件,在事件中写要实现的后台操作代码即可。比如

bubuko.com,布布扣
private void button1_Click(object sender, EventArgs e)
{
    bgWork.RunWorkerAsync(); //调用方法,触发DoWork事件
}

private void bgWork_DoWork(object sender, DoWorkEventArgs e)
{
    //在此实现后台操作代码      
}
bubuko.com,布布扣

 

2、取消正在执行的后台操作

在取消后台操作的地方调用BackgroundWorker组件的CancelAsync()方法,然后在DoWork事件判断BackgroundWorker组件的后台操作状态,即BackgroundWorker组件的CancellationPending属性。

bubuko.com,布布扣
private void btnCancel_Click(object sender, EventArgs e)
{
    bgWork.CancelAsync();
}

private void bgWork_DoWork(object sender, DoWorkEventArgs e)
{
    if (bgWork.CancellationPending)
    {
        Thread.Sleep(10);
        //这里实现回滚操作
        e.Cancel = true;
    }
    else
    {
        Thread.Sleep(10);
        //这里实现后台操作
    }
}
bubuko.com,布布扣

 

3、主窗体界面显示后台操作状态或进度

在DoWork事件的后台操作代码最后调用BackgroundWorker组件的ReportProgress()方法。该方法被执行是会触发BackgroundWorker组件的ProgressChanged事件,在该事件中可以操作主窗体控件。

bubuko.com,布布扣
private void bgWork_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    label1.Text = e.UserState;  //第一个参数
    progressBar1.Value = e.ProgressPercentage; //第二个参数
}

private void bgWork_DoWork(object sender, DoWorkEventArgs e)
{
    for (int i = 1000; i < 2000; i++)
    {
        if (bgWork.CancellationPending)
        {
            for (int k = i; k >= 1000; k--)
             {
                 Thread.Sleep(10);
                  //这里实现回滚操作
                  bgWork.ReportProgress(k, "正在收回数据");
             }
             e.Cancel = true;
             return;
        }
        else
        {
            Thread.Sleep(10);
            //这里执行后台操作
            bgWork.ReportProgress(i, "正在录入数据");
        }
    }
}
bubuko.com,布布扣

 

4、后台操作结束后提示信息。

当后台操作结束后,会触发BackgroundWorker组件的RunWorkerCompleted事件

bubuko.com,布布扣
private void bgWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Cancelled)
    {
        MessageBox.Show("当前操作被取消!");
    }
    else
    {
        MessageBox.Show("操作完成!");
    }
}
bubuko.com,布布扣

 

参考:http://www.cnblogs.com/inforasc/archive/2009/10/12/1582110.html

参考:http://www.cnblogs.com/chenxizhang/archive/2010/03/13/1685209.html

BackgroundWorker组件使用总结,布布扣,bubuko.com

BackgroundWorker组件使用总结

标签:style   blog   class   code   java   tar   

原文地址:http://www.cnblogs.com/tracine0513/p/3714256.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!