#region bgWorker private void initBackgroundWorker() { //准备后台进程 if (m_bgWorker == null) m_bgWorker = new BackgroundWorker(); //指定提供进度通知 m_bgWorker.WorkerReportsProgress = true; //提供中断功能 m_bgWorker.WorkerSupportsCancellation = true; //线程的主要功能是处理事件 m_bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork); //指定处理进度变化的函数 m_bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgressChanged); //指定后台工作结束调用的函数,结束有可能有以下三种情况 //1.工作完成 //2.工作错误异常 //3.用户取消工作 //通过参数RunWorkerCompletedEventArgs进行区别 // error: Exception // Any error that occurred during the asynchronous operation. // // cancelled: bool // A value indicating whether the asynchronous operation was canceled. // // result: object // The result of an asynchronous operation. m_bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted); } private void bgWorker_DoWork(object sender, DoWorkEventArgs e) { long f = 0; for (int i = 0; i < 100000; i++) { for (int j = 0; j < 10000; j++) { f = f + i * j; } if (m_bgWorker.CancellationPending) { e.Cancel = true; return; } m_bgWorker.ReportProgress((int)((i - 1) * 100 / 100000)); } } private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { //显示进度信息 pgBar.Value = e.ProgressPercentage; lblTip.Text = e.ProgressPercentage + "%"; } private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Cancelled) { MessageBox.Show("用户取消了!"); } else if (e.Error != null) { throw new Exception("出错了!", e.Error); } else { MessageBox.Show("操作结束了!"); } btnBegin.Enabled = true; btnCancle.Enabled = false; } #endregion private void btnCancle_Click(object sender, EventArgs e) { m_bgWorker.CancelAsync(); } private void btnBegin_Click(object sender, EventArgs e) { m_bgWorker.RunWorkerAsync(); btnBegin.Enabled = false; btnCancle.Enabled = true; }