using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace BackGroundWorkerTest { public partial class Form1 : Form { BackgroundWorker backgroundWorker1 = new BackgroundWorker(); public Form1() { InitializeComponent(); progressBar1.Minimum = 0; progressBar1.Maximum = 100; backgroundWorker1.WorkerReportsProgress = true; backgroundWorker1.WorkerSupportsCancellation = true; backgroundWorker1.RunWorkerCompleted += RunWorkerCompleted; backgroundWorker1.ProgressChanged += ProgressChanged; backgroundWorker1.DoWork += DoWork; } private void button_start_Click(object sender, EventArgs e) { if(backgroundWorker1.IsBusy) return; backgroundWorker1.RunWorkerAsync(); } private void button_cancel_Click(object sender, EventArgs e) { backgroundWorker1.CancelAsync(); } private void DoWork(object sender, DoWorkEventArgs e) { //模拟加载 for (int i = 1; i <= 100; i++) { Thread.Sleep(100); //如果用户取消了操作 if (backgroundWorker1.CancellationPending) { e.Cancel = true; return; } backgroundWorker1.ReportProgress(i); } } private void ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage;//显示进度 label_per.Text = e.ProgressPercentage + "%"; } private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { MessageBox.Show("操作被取消"); } else { MessageBox.Show("操作完成"); } } } }
运行效果