關閉應用程式時如何關閉子執行緒

luckeryin發表於2009-05-20

執行緒分為前臺執行緒和後臺執行緒,這兩者的區別就是:應用程式必須執行完所有的前臺執行緒才可以退出,有時雖然我們關閉了主視窗,但前以子執行緒還沒有結束,應用程式此時並沒有真正完全關閉;而對於後臺執行緒,應用程式則可以不考慮其是否已經執行完畢而直接退出,所有的後臺執行緒在應用程式退出時都會自動結束。

通過將 Thread.IsBackground 設定為 true,就可以將執行緒指定為後臺執行緒。同樣,通過將 IsBackground 設定為 false,就可以將執行緒指定為前臺執行緒。從非託管程式碼進入托管執行環境的所有執行緒都被標記為後臺執行緒。通過建立並啟動新的 Thread 物件而生成的所有執行緒都是前臺執行緒。

如果沒有設定前後臺執行緒的區別,還有另外一個方法可以在程式結束的時候對其執行關閉操作,那就是在程式的關閉事件中加入如下處理程式碼:

try
{
	Thread.CurrentThread.Abort();
}
catch (ThreadAbortException)
{
   	System.Diagnostics.Process.GetCurrentProcess().Kill();
}

通過檢測ThreadAbortException異常來執行關聯執行緒的停止操作。

但是,通常情況下,我們最好讓子執行緒自己結束,即執行緒工作完成,自動結束.暴力終止執行緒,可能導致執行緒任務異常終止,造成資料出錯.

相關文章