BackgroundWorker
常用属性
1.CancellationPending
指示应用程序是否已请求取消后台操作。
只读属性,默认为 false,当执行了 CancelAsync 方法后,值为 true。
2.WorkerSupportsCancellation
指示是否支持异步取消。要执行 CancelAsync 方法,需要先设置该属性为 true。
3.WorkerReportsProgress
指示是否能报告进度。要执行 ReportProgress 方法,需要先设置该属性为 true。
常用事件
1.DoWork
调用 RunWorkerAsync 方法时发生。
2.RunWorkerCompleted
后台操作已完成、被取消或引发异常时发生(操作完成时)。
3.ProgressChanged
调用 ReportProgress(bw.ReportProgress(value,state);) 方法时发生。
在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
例子:
#region 加载事件 private void Form1_Load(object sender, EventArgs e) { backgroundWorker1.WorkerReportsProgress = true;//是否在异步操作里报告进度 backgroundWorker1.WorkerSupportsCancellation = true; //是否可以取消这个异步操作 } #endregion //开始backgroundworker异步处理 private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(20);// } int index = 0; //backgroundworker异步要调用的方法 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { try { BackgroundWorker bw = (BackgroundWorker)sender; int count = Convert.ToInt32(e.Argument);//count为20 for (int i = 0; i < count; i++) { if (bw.CancellationPending)//bw.CancellationPending最后一次调用BackgroundWorker的方法是RunWorkerAsync(falser)还是CancelAsync(true), { return; } index++; Thread.Sleep(1000); bw.ReportProgress(index, e.Cancel); } e.Result = "成功"; } catch (Exception) { } } //backgroundworker异步处理返回的进度 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.label1.Text = e.ProgressPercentage.ToString(); } //backgroundworker异步处理完成过后的事件 private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // MessageBox.Show(e.Error.Message); MessageBox.Show(e.Result.ToString()); } //取消backgroundworker异步处理 private void button2_Click(object sender, EventArgs e) { backgroundWorker1.CancelAsync(); }