Friday, February 24, 2017

Thursday, February 23, 2017

[C#] BackgroundWorker 範例4

閱讀這篇 MSDN 文章 如何:在背景中下載檔案,發現兩個重點
請務必檢查您 RunWorkerCompleted 事件處理常式中的 AsyncCompletedEventArgs.Error 屬性,再嘗試存取可能會受 DoWork 事件處理常式影響的 RunWorkerCompletedEventArgs.Result 屬性或任何其他物件。
XXXEventArgs 通常都是 Event 第二參數,RunWorkerCompleted Event 明明就是 RunWorkerCompletedEventArgs,只能自行解讀為要先判斷 RunWorkerCompletedEventArgs.Cancel 和 RunWorkerCompletedEventArgs.Error,再來存取 RunWorkerCompletedEventArgs.Result

在 RunWorkerCompletedEventArgs.Result 內也有相關說明
您 RunWorkerCompleted 事件處理常式應該一律檢查 Error 和 Cancelled 屬性,然後再存取 Result 屬性。 如果發生例外狀況,或已取消作業,存取 Result 屬性引發例外狀況。
Application.DoEvents 的存在,可以讓迴圈進行時,UI 還可以進行操作,但該作法會造成 CPU 飆高,所以要利用 Thread.Sleep 睡一下,該效果透過工作管理員就可以觀察到
while (this.backgroundWorker1.IsBusy)
{
    progressBar1.Increment(1);
    // Keep UI messages moving, so the form remains 
    // responsive during the asynchronous operation.
    Application.DoEvents();
    // 避免 CPU 飆高
    Thread.Sleep(1);
}

Sunday, February 19, 2017

[C#] BackgroundWorker 範例3

閱讀該篇 MSDN 文章 - 逐步解說:實作使用背景作業的表單 並記錄,該文章是利用 Fibonacci 來產生耗時操作,藉此來學習 BackgroundWorker

WinForm layout

[C#] BackgroundWorker - Fibonacci-1

Saturday, February 18, 2017

[C#] BackgroundWorker 範例2

閱讀該篇 MSDN 文章 - BackgroundWorker 類別 並記錄,該文章是利用迴圈和 Tread.Sleep 來產生耗時操作,藉此來學習 BackgroundWorker

WinForm layout

[C#] BackgroundWorker 簡易範例-1

Friday, February 17, 2017

[C#] BackgroundWorker 範例1

閱讀該篇 MSDN 文章 - Walkthrough: Multithreading with the BackgroundWorker Component (C#) 並記錄,該文章是利用讀取 txt 檔案並統計其關鍵字,藉此介紹 BackgroundWorker 功能

Solution 檔案

WalkthroughBackgroundWorker-1

WinForm Layout

WalkthroughBackgroundWorker-2