后台代码:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace winform 11 { 12 public partial class fm : Form 13 { 14 BackgroundWorker worker; 15 public fm() 16 { 17 InitializeComponent(); 18 worker = new BackgroundWorker(); 19 worker.WorkerReportsProgress = true; 20 worker.WorkerSupportsCancellation = true; 21 //正式做事情的地方 22 worker.DoWork += new DoWorkEventHandler(DoWork); 23 //任务完称时要做的,比如提示等等 24 worker.ProgressChanged += new ProgressChangedEventHandler(ProgessChanged); 25 //任务进行时,报告进度 26 worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted); 27 progressBar1.Maximum = 100; 28 } 29 //调用 RunWorkerAsync 时发生 30 public void DoWork(object sender, DoWorkEventArgs e) 31 { 32 e.Result = ComputeFibonacci(worker, e); 33 34 //获取异步操作结果的值,当ComputeFibonacci(worker, e)返回时,异步过程结束 35 } 36 37 //调用 ReportProgress 时发生 38 public void ProgessChanged(object sender, ProgressChangedEventArgs e) 39 { 40 this.progressBar1.Value = e.ProgressPercentage; 41 //将异步任务进度的百分比赋给进度条 42 int value = int.Parse(e.UserState.ToString()); 43 if (value % 10 == 0) 44 textBox1.Text += " " + value; 45 else 46 textBox1.Text += "-" + value; 47 label1.Text = string.Format("完成{0}%", (value + 1) * 100 / progressBar1.Maximum); 48 } 49 50 //当后台操作已完成、被取消或引发异常时发生 51 public void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 52 { 53 if (e.Cancelled) 54 MessageBox.Show("取消了"); 55 else 56 MessageBox.Show("完成!" + e.Result); 57 } 58 59 private int ComputeFibonacci(object sender, DoWorkEventArgs e) 60 { 61 62 for (int i = 0; i < 100; i++) 63 { 64 //判断应用程序是否取消后台操作 65 if (worker.CancellationPending) 66 { 67 e.Cancel = true; 68 break; 69 } 70 //dowork function 71 worker.ReportProgress(i, i); 72 System.Threading.Thread.Sleep(50); 73 } 74 return -1; 75 } 76 private void btnStart_Click(object sender, EventArgs e) 77 { 78 if (worker.IsBusy) 79 { 80 MessageBox.Show("已经执行异步操作"); 81 return; 82 } 83 textBox1.Text = ""; 84 label1.Text = ""; 85 worker.RunWorkerAsync(); 86 87 btnStart.Enabled = false; 88 89 btnPause.Enabled = true; 90 } 91 92 private void btnPause_Click(object sender, EventArgs e) 93 { 94 btnPause.Enabled = false; 95 96 btnStart.Enabled = true; 97 98 worker.CancelAsync(); 99 } 100 } 101 }
页面效果: