BackgroundWork类提供通过后台线程运行非常耗时的操作的便利方法。BackgroundWork类允许您查看操作的状态并且可以取消操作。使用BackgroundWork类时,可以在用户界面中指示操作进度完成和取消情况。
1.在类级别创建BackgroundWork类的实例。
2.指定是否希望后台操作允许执行取消操作和报告进度。
3.为后台辅助线程的DoWork事件创建事件处理程序。
4.为后台辅助线程的ProgressChanged事件创建事件处理程序。
5.为RunWorkCompleted事件创建一个事件处理程序。
6.为BackgroundWork实例的事件添加事件处理程序。
7.通过调用RunWorkerAsync方法来开始运行后台操作。
8.通过调用CancelAsync方法来取消后台操作。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace shouji1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.progressBar1.Value = e.ProgressPercentage; this.label1.Text = e.UserState.ToString(); this.label1.Update(); } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MessageBox.Show("???????"); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { work(this.backgroundWorker1); } private bool work(BackgroundWorker bk) { int tatle = 100; for (int i = 0; i <= tatle; i++) { if (bk.CancellationPending) //??????????????????,???????? { bk.ReportProgress(i, String.Format("???? {0},?????????", i)); return false; } bk.ReportProgress(i, String.Format("???? {0} ", i)); } return true; } private void button2_Click(object sender, EventArgs e) { this.backgroundWorker1.CancelAsync(); } private void button1_Click(object sender, EventArgs e) { this.backgroundWorker1.RunWorkerAsync(); } private void button3_Click(object sender, EventArgs e) { this.Close(); } private void progressBar1_Click(object sender, EventArgs e) { } } }