程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 如果在BackgroundWorker運行過程中關閉窗體

如果在BackgroundWorker運行過程中關閉窗體

編輯:C#入門知識

在Windows Form應用中,BackgroundWorker 類允許您在單獨的專用線程上運行操作。耗時的操作(如下載和數據庫事務)在長時間運行時可能會導致用戶界面 (UI) 似乎處於停止響應狀態。如果您需要能進行響應的用戶界面,而且面臨與這類操作相關的長時間延遲,則可以使用 BackgroundWorker 類方便地解決問題。由於操作是異步執行的,用戶可能在異步操作執行過程中關閉當前窗體,而窗體的關閉會伴隨著Dispose方法的執行。如果我們注冊了BackgroundWorker的RunWorkerCompleted事件,並且在該事件處理程序中需要操作這個被Disposed的窗體,就會出現一些無法預知的異常。

一、一個簡單的例子

我們寫一個簡單的例子來說明上述的場景:在一個非主窗體(主窗體的關閉會導致程序的終止)的Windows窗體中,一個BackgroundWorker被用於異步地執行一段耗時的操作。在我們的例子中,通過讓線程休眠10秒來模擬這個“耗時操作”。方法backgroundWorker_RunWorkerCompleted是BackgroundWorker的RunWorkerCompleted事件處理方法,在這裡我們通過MessageBox來顯示當前窗體的IsDisposed屬性值。注冊到該BackgroundWorker的異步操作通過點擊某個按鈕開啟。相關的代碼如下所示。

   1: public partial class BgwForm : Form
   2: {
   3:     public BgwForm()
   4:     {
   5:         InitializeComponent();
   6:     }
   7:  
   8:     private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
   9:     {
  10:         Thread.Sleep(10000);
  11:     }
  12:  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved