首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 非同步程式設計基礎(二·上):事件式非同步模式 (EAP) 與 BackgroundWorker 元件介紹

     編輯:關於C語言

事件式非同步模式 (EAP) 概覽

.NET 2.0 引入,比 APM (IAsyncResult) 更高階、更符合元件設計慣例:

  • MethodNameAsync:啟動非同步操作 (可多載:單一呼叫/多重呼叫含 userState)
  • MethodNameCompleted:完成事件 (AsyncCompletedEventArgs)
  • CancelAsync / MethodNameAsyncCancel:取消掛起操作
  • ProgressChanged / MethodNameProgressChanged:進度回報 (ProgressChangedEventArgs 含 ProgressPercentage/UserState)

單一呼叫 vs 多重呼叫:單一呼叫進行中再次呼叫拋出 InvalidOperationException;多重呼叫透過 userState 區分各操作,支援並發。

BackgroundWorker 元件

完整實作 EAP 模式的現成元件:

  • RunWorkerAsync() (單一呼叫) → 引發 DoWork (背景執行緒) → 定期 ReportProgress() → 引發 ProgressChanged (UI 執行緒) → 完成引發 RunWorkerCompleted
  • WorkerReportsProgress:啟用進度回報
  • CancelAsync():請求取消 (需在 DoWork 內檢查 CancellationPending)

實戰 Demo 架構

class BackgroundWorkerDemo {
    private BackgroundWorker _bw;
    private string _filePath;
    public BackgroundWorkerDemo(string filePath) {
        _filePath = filePath;
        _bw = new BackgroundWorker { WorkerReportsProgress = true };
        _bw.DoWork += BackgroundWorker_DoWork;
        _bw.ProgressChanged += BackgroundWorker_ProgressChanged;
        _bw.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
    }
    public void Start() => _bw.RunWorkerAsync();
}

場景:讀取大型文字檔 (數十 MB) 並顯示進度百分比。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved