BackgroundWroker使用方法备忘

来源:互联网 发布:管家婆软件好用吗 编辑:程序博客网 时间:2024/06/08 07:25
复制代码
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();            }        }    }}
复制代码