BackgroundWorker 類允許您在單獨的專用線程上運行操作。 耗時的操作(如下載和數據庫事務)在長時間運行時可能會導致用戶界面 (UI) 似乎處於停止響應狀態。 如果您需要能進行響應的用戶界面,而且面臨與這類操作相關的長時間延遲,則可以使用 BackgroundWorker 類方便地解決問題。
一、BackgroundWorker 相關生命周期
1.聲明BackgroundWorker
2.設置相關操作事件和屬性,並開始這個對象
3.執行設置事件(DoWork事件為耗時操作,耗時操作時反饋給UI界面的ProgressChanged事件(Dowork的報告方法引發),
完成DoWork時執行RunWorkerCompleted方法)
4.寫相關事件
比如導出excel
1.點擊時事件

/// <summary> /// 將數據庫數據轉換為excel操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DbToExcel(object sender, RoutedEventArgs e) { BackgroundWorker bw = new BackgroundWorker(); //創建一個BackgroundWorker線程 bw.WorkerReportsProgress = true; //設置BackgroundWorker可以進行報告更新 bw.DoWork += new DoWorkEventHandler(toExcel); //執行耗時操作 創建一個DoWork事件,並進行報告,指定bw_DoWork方法去做事 bw.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); //通過報告(數據),進行對UI操作 bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); //完成操作時響應事件 PartPosition = null; bw.RunWorkerAsync("my url");//開始執行DoWork事件 並傳遞一個對象 }
2.BackgroundWorker 需要執行的事件

void toExcel(object sender, DoWorkEventArgs e) { BackgroundWorker bw = (BackgroundWorker)sender; string url = e.Argument.ToString(); DataTable tableData = ProductMananger.getAllPositionList(); #region 插入數據 foreach (DataRow row in tableData.Rows) { //沒有取消后台操作 if (!bw.CancellationPending) { //報告 bw.ReportProgress((int)((double)(rowIndex - 1) / RowCount * 100), i); } } } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { //progressBar1.Value = e.ProgressPercentage; //label1.Text = e.UserState.ToString(); 這個是一個對象 this.progressText.Text = e.ProgressPercentage+"%"; this.progressbar_Excel.Value = e.ProgressPercentage; } private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MessageBox.Show("ok!"); }
如果不這樣可以如下:
Dispatcher.Invoke(new Action(() => { this.progressText.Text = (int)(Value / Maximum * 100) + "%"; this.progressbar_Excel.Value = Value; }));
參考
http://www.cnblogs.com/zhouzangood/articles/3638117.html