BackgroundWorker控件簡介
使用BackgroundWorker控件可以在后台單獨的線程上執行操作,通常用於數據庫操作、文件下載等相對耗時一般要求后台處理的任務。使用起來比較簡單,如果需要后台處理的任務少的話,①在VS中可以直接從工具箱中拖一個BackgroundWorker到主界面中即可,自動命名backgroundWorker1。②或者手動聲明初始化BackgroundWorker類新實例:BackgroundWorker bgw=new BackgroundWorker();
所屬命名空間:System.ComponentModel
1、常用屬性:
①CancellationPending:獲取一個值,指示應用程序是否已經請求取消后台操作。如果應用程序已經請求取消后台操作,則為true;否則為false,默認為false。如果CancellationPending為true,則已對BackgroundWorker調用了CancelAsync方法。
②IsBusy:獲取一個值,指示BackgroundWorker是否正在運行異步操作。如果BackgroundWorker正在運行異步操作,則為true;否則為false。調用RunWorkerAsync時,BackgroundWorker將啟動異步操作。
③WorkerReportsProgress:獲取或設置一個值,該值指示BackgroundWorker能否報告進度更新。若支持進度更新,則為true;否則為false,默認為false。當該屬性為true時,用戶代碼可以調用ReportProgress方法來引發ProgressChanged事件。可在BackgroundWorker屬性中設置,也可在代碼中編寫bgw.WorkerReportsProgress = true;
④WorkerSupportsCancellation:獲取或設置一個值,該值指示BackgroundWorker是否支持異步取消。若支持取消,則為true,;否則為false,默認為false。當該屬性為true時,可以調用CancelAsync方法中斷后台操作。可在BackgroundWorker屬性中設置,也可在代碼中編寫bgw.WorkerSupportsCancellation = true;
2、常用方法:
①CancelAsync():請求取消掛起的后台操作。CancelAsync 提交終止掛起的后台操作的請求,並將CancellationPending屬性設置為true。
②Dispose():釋放由Component使用的所有資源。
③OnDoWork(DoWorkEventArgs):引發DoWork事件。
④OnProgressChanged(ProgressChangedEventArgs):引發ProgressChanged事件。
⑤OnRunWorkerCompleted(RunWorkerCompletedEventArgs):引發RunWorkerCompleted事件。
⑥ReportProgress(Int32)、ReportProgress(Int32,Object):引發ProgressChanged事件。e.g:bgw.ReportProgress(percentProgress); 參數percentProgress表示已完成的后台操作所占的百分比,范圍從0%到100%。
⑦RunWorkerAsync()、RunWorkerAsync(Object):開始執行后台操作。e.g:bgw.RunWorkerAsync(argument);參數argument表示要在DoWork事件處理程序中執行的后台操作使用的參數。
注意,所傳入的參數最多為一個,若想傳入多個參數,則將參數封裝到一個類中,通過類的實例來傳遞;或者若傳入的參數為同一類型,則可以將參數寫進一個數組,通過傳入數組來傳遞。
3、事件:
①Disposed:當通過調用Dispose方法釋放組件時發生。
②DoWork:調用RunWorkerAsync時發生。在此事件中處理程序中調用耗時的操作。
③ProgressChanged:調用ReportProgress時發生。在此事件中處理收到進度更新的通知。
④RunWorkerCompleted:當后台操作已完成、被取消或引發異常時發生。在此事件中處理操作完成時收到的通知。
參考自MSDN,其他相關詳細見MSDN:https://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker(v=vs.110).aspx