在 .net 2.0 之後,出現了一個可以與 Thread 相當類似功能的物件
叫做 Backgroundworker
在這不討論兩者的性能比較,僅只稍微說明如何使用
這個物件使用起來蠻方便的,有點像是進階型的 Thread
1. Backgroundworker 的作用
相當於 Thread,這個物件可以讓開發者建立一個在背景執行的工作
而不影響前端的表現,亦即前端可以讓使用者繼續操作
Backgroundworker 會默默的執行其運作的項目
通常可以用在處理需要較久時間的資料
MSDN 提供了幾個例子
*影像下載
*Web 服務引動過程
*檔案下載與上載 (包含在點對點應用程式中)
*複雜的本機計算
*資料庫交易
*本機磁碟存取 (相對於記憶體存取,速度較慢)
2.Backgroundworker 常用的幾個成員
成員名稱 | 說明 |
WorkerReportsProgress | 布林值,設定或取得是否可以報告更新進度 |
DoWork | 委派,指示要做的工作方法 |
ProgressChanged | 委派,指示當回報進度時要做的方法 |
RunWorkerCompleted | 委派,指示當工作完成時要執行的方法 |
RunWorkerAsync | 方法,開始同步執行背景作業 |
IsBusy | 布林值,取得是否正在執行非同步作業 |
CancellationPending | 布林值,取得是否已經要求取消背景作業 |
WorkerSupportsCancellation | 布林值,取得或設定是否支援非同步取消 |
3. Backgroundworker 的使用方法
先初始化 bgwkr.WorkerReportsProgress = true;
bgwkr.DoWork += new DoWorkEventHandler(bgwkr_DoWork);
bgwkr.ProgressChanged += new ProgressChangedEventHandler(bgwkr_ProgressChanged);
bgwkr.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgwkr_RunWorkerCompleted);
要求開始工作 bgwkr.RunWorkerAsync();
工作內容的方法 private void bgwkr_DoWork(object sender, DoWorkEventArgs e)
{
// 工作內容…
}
當回報工作進度時呼叫,這邊可以改變前端控制項的內容 private void bgwkr_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.tbInf.Text += "Proceeding, please wait...\n";
this.pbProgress.Value = e.ProgressPercentage;
}
當工作完成時呼叫,這邊可以改變前端控制項的內容 private void _bgwkr_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.tbInf.Text += "Finish..";
this.btOK.IsEnabled = true;
}
使用起來非常的方便
至於效能感覺上用起來沒有比 Thread 差
當然還要再做進一步的測試才知道
沒有留言:
張貼留言