using System; using System.ComponentModel; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form1 : Form { private BackgroundWorker bgWorker = new BackgroundWorker(); public Form1() { InitializeComponent(); InitializeBackgroundWorker(); } private void InitializeBackgroundWorker() { bgWorker.WorkerReportsProgress = true; bgWorker.WorkerSupportsCancellation = true; bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork); bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged); bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted); } public void bgWorker_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i <= 100; i++) { if (bgWorker.CancellationPending) { e.Cancel = true; return; } else { bgWorker.ReportProgress(i, "Working"); System.Threading.Thread.Sleep(10); } } } public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e) { string state =(string)e.UserState;//接收ReportProgress方法传递过来的userState this.label2.Text = "状态:" +state; this.progressBar1.Value = e.ProgressPercentage; this.label1.Text = "处理进度:" + Convert.ToString(e.ProgressPercentage) + "%"; } public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { MessageBox.Show(e.Error.ToString()); return; } if (!e.Cancelled) this.label1.Text = "处理完毕!"; else this.label1.Text = "处理终止!"; } private void btnStart_Click_1(object sender, EventArgs e) { if (bgWorker.IsBusy) return; this.progressBar1.Maximum = 100; this.btnStart.Enabled = false; this.btnStop.Enabled = true; bgWorker.RunWorkerAsync("hello"); } private void btnStop_Click_1(object sender, EventArgs e) { this.btnStart.Enabled = true; this.btnStop.Enabled = false; bgWorker.CancelAsync(); } } }