BackgroundWroker使用方法备忘

复制代码
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    publicpartialclass Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            worker =new BackgroundWorker();
            worker.DoWork+=new DoWorkEventHandler(worker_DoWork);
            worker.ProgressChanged+=new ProgressChangedEventHandler(worker_ProgressChanged);
            worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
            worker.WorkerReportsProgress =true;  //允许进度显示
            worker.WorkerSupportsCancellation =true; //允许运行中取消
        }

        BackgroundWorker worker;

        privatevoid Form1_Load(object sender, EventArgs e)
        {
            
        }

        privatevoid worker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i =0; i <300; i++)
            {
                Thread.Sleep(100);
                //每隔一段时间就向主线程报告进度,以便更新进度条。
                //多数情况下,你只需要发送一个整数去更新即可
                worker.ReportProgress(i/3);
                if (worker.CancellationPending)
                {
                    //如果任务被取消
                    e.Cancel =true;
                    worker.ReportProgress(0);
                    return;
                }
            }
        }

        privatevoid worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            pbarThis.Value = e.ProgressPercentage;
            lblText.Text ="已经处理了 "+ pbarThis.Value.ToString() +"%";
        }

        privatevoid worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                lblText.Text ="任务取消";
            }
            elseif (e.Error !=null)
            {
                lblText.Text ="发生错误";
            }
            else
            {
                lblText.Text ="任务完成";
            }
            btnStart.Enabled =true;
            btnCancel.Enabled =false;
        }

        privatevoid btnStart_Click(object sender, EventArgs e)
            {
            btnStart.Enabled =false;
            btnCancel.Enabled =true;

            //通知主线程开始进行数据处理
            worker.RunWorkerAsync();
        }

        privatevoid btnCancel_Click(object sender, EventArgs e)
        {
            if (worker.IsBusy)
            {

                worker.CancelAsync();
            }
        }
    }
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值