//控件事件調用DoWork()方法就行。
#region 進度條 private BackgroundWorker worker = null; private void DoWork(string outfile) { //顯示進度條 ProgressForm progressForm = new ProgressForm(); progressForm.TopMost = true; progressForm.Show(this); //准備進度條的記數 worker = new BackgroundWorker(); //指定提供進度通知 worker.WorkerReportsProgress = true; //提供中斷功能 worker.WorkerSupportsCancellation = true; //線程的主要功能是處理事件 //開啟線程執行工作 worker.DoWork += new DoWorkEventHandler(worker_DoWork); // Specify the function to use to handle progress //指定使用的功能來處理進度 worker.ProgressChanged += new ProgressChangedEventHandler(progressForm.OnProgressChanged); worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged); //進度條結束完成工作 //1.工作完成 //2.工作錯誤異常 //3.取消工作 worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(progressForm.OnProcessCompleted); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); //如果進度條需要參數 //調用System.ComponentModel.BackgroundWorker.RunWorkerAsync //傳入你的參數至System.ComponentModel.BackgroundWorker.DoWork //提取參數 //System.ComponentModel.DoWorkEventArgs.Argument worker.RunWorkerAsync(outfile); } //單線程執行工作 private void worker_DoWork(object sender, DoWorkEventArgs e) { try { worker_Doing((BackgroundWorker)sender, e); } catch (Exception ex) {
//此處為異常處理,不能放到worker_Doing內部 e.Result = ex; } } //進行工作 private void worker_Doing(BackgroundWorker worker, DoWorkEventArgs e) { string outfile = e.Argument as string; //傳入參數 int count = 500; for (int i = 0; i < count; i++) { //檢查取消 if (worker.CancellationPending) { e.Cancel = true; break; } else { //此處為具體的工作代碼
//...
//進度報告 worker.ReportProgress((i + 1) * (100 / count), "進度信息"); //線程休眠 Thread.Sleep(500); } } } //進度報告 private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { //此處可在窗口顯示進度信息
//e.UserState as string
//...
} //工作完成狀態 private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { string message = ""; if (e.Error != null) { message = e.Error.Message; MessageBox.Show(this, message, "異常"); } else if (e.Cancelled) { message = "操作被取消。"; MessageBox.Show(this, message, "提示"); } else { if (e.Result == null) { message = "完成。"; MessageBox.Show(this, message, "信息"); } else { message = (e.Result as Exception).Message; MessageBox.Show(this, message, "異常"); } } //此處代碼為完成后的處理工作
//... } #endregion