C# Winform实现BackgroundWoker

若操作页面中出现长时间查询或其他耗时操作,页面会出现卡死状态,为了更好的用户体验我们可以创建线程来操作这些耗时操作。一般的线程task,如果想看到线程执行状态可以使用backgroundwoker来操作。

实现BackgroungWoker有三个事件DoWork,ProgressChanged,RunWokerCompleted   注:在Dowork中不能操作页面控件,要将对控件的操作放在RunWokerCompleted工作完成以后。

DoWork:在调用RunWokerAsyns事件的时候发生,异步完成要操作的事件。

ProgressChanged:在DoWork中会被自动调用,以通知线程执行状态告知用户。包含一个int类型的ProgressPercentage告知完成进度百分比。

RunWokerCompleted:在Dowork完成或取消以后自动调用。该事件的RunWorkerCompletedEventArgs参数包含三个常用的属性Error,Cancelled,Result。其中,Error表示在执行异步操作期间发生的错误;Cancelled用于判断用户是否取消了异步操作;Result属性接收来自DoWork事件的DoWorkEventArgs参数的Result属性值,可用于传递异步操作的执行结果。

BackgroundWorker bgw = new BackgroundWorker();//创建实例

private void BeginWork(){

bgw.DoWork += bgw_DoWork;//创建Dowork事件

bgw.ProgressChanged += bgw_ProgressChanged;//注册ProgressChanged事件做显示进度条

bgw.RunWorkerCompleted += bgw_RunWorkerCompleted;//注册RunWorkerCompleted事件完成或取消后的操作

bgw.WorkerSupportsCancellation = true;//允许取消任务

bgw.WorkerReportsProgress = true;//开启进度条

 if (!bgw.IsBusy)//判断backgroundWorker是否正在运行异步操作  
 {
       bgw.RunWorkerAsync();//开始执行后台操作,调用DoWork事件  
 }

progressBar1.Value = 0;//progressBar1进度条控件
progressBar1.Visible = true;

}

 private void bgw_DoWork(object sender, DoWorkEventArgs e)//DoWork事件

{

         bgw.ReportProgress(1);//进度1

    if (bgw.CancellationPending)//访问CancellationPending获知用户是否取消任务
    {   bgw.ReportProgress(2);//进度2
        e.Cancel = true;
        bgw.ReportProgress(3);//进度3
        return;
    }else{
        //操作
        bgw.ReportProgress(2);//进度2
        //操作
        bgw.ReportProgress(3);//进度3
    }

}

private void bgw_ProgressChanged(object sender,ProgressChangedEventArgs e)//将进度传递给peogress控件显示在页面中提高用户体验
        {
            this.progressBar1.Value = e.ProgressPercentage;
        } 

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)//Dowork完成或取消以后执行
        {

           if(e.Error!=null)
            {
                MessageBox.Show(e.Error.ToString());
                return;
            }
            if (!e.Cancelled){

                //完成操作

                }
            else{

                MessageBox.Show("用户操作已经取消");

                }

          } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值