最近寫的乙個程式,關閉主程式時,發現程序裡總有乙個.exe檔案。
研究後發現如果程式退出的時候不關閉執行緒,那麼執行緒就會一直的存在,但是大多啟動的執行緒都是區域性變數,不能一一的關閉,如果呼叫thread.currentthread.abort()方法關閉主線程的話,就會threadabortexception 異常,因此這樣不行。
後來找到了解決辦法:
thread.isbackground 設定執行緒為後台執行緒。
在主線程初始化的時候,設定
thread.currentthread.isbackground = true;
這樣,主線程就是後台執行緒,在關閉主程式的時候就會關閉主線程,從而關閉所有執行緒。
但是這樣的話,就會強制關閉所有正在執行的執行緒,所以在關閉的時候要對執行緒工作的結果儲存。
——————————————
msdn對前台執行緒和後台執行緒的解釋:
託管執行緒或者是後台執行緒,或者是前台執行緒。後台執行緒不會使託管執行環境處於活動狀態,除此之外,後台執行緒與前台執行緒是一樣的。一旦所有前台執行緒在託管程序(其中 .exe
檔案是託管程式集)中被停止,
系統將停止所有後台執行緒並關閉。通過設定 thread.isbackground 屬性,可以將乙個執行緒指定為後台執行緒或前台執行緒。例如,通過將 thread.isbackground 設定為 true,就可以將執行緒指定為後台執行緒。同樣,通過將 isbackground 設定為 false,就可以將執行緒指定為前台執行緒。從非託管**進入託管執行環境的所有執行緒都被標記為後台執行緒。通過建立並啟動新的 thread 物件而生成的所有執行緒都是前台執行緒。如果要建立希望用來偵聽某些活動(如套接字連線)的前台執行緒,則應將 thread.isbackground 設定為 true,以便程序可以終止。
——————————————
c#程式的幾種退出方法:
2.system.environment.exit(0); //無論在主線程和其它執行緒,只要執行了這句,都可以把程式結束乾淨
3.this.close();
多執行緒 Thread
如果從另外乙個執行緒操作windows窗體上的控制項,就會與主線程產生競爭,造成不可預料的後果,甚至死鎖。因此,windows gui程式設計有乙個規則 只能通過建立控制項的執行緒來操作控制項的資料!實現方法 要從執行緒外操作windows控制項,那麼就要使用invoke或begininvoke方法...
Thread執行緒類
posted on 2011 05 03 10 45 明天陪你看海 閱讀 123 編輯收藏 說明 apartmentstate 獲取或設定此執行緒的單元狀態 currentcontext 獲取執行緒正在其中執行的當前上下文 currentthread 獲取當前正在執行的執行緒 isalive 獲取乙...
Thread執行緒類
posted on 2011 05 03 10 45 明天陪你看海 閱讀 123 編輯收藏 說明 apartmentstate 獲取或設定此執行緒的單元狀態 currentcontext 獲取執行緒正在其中執行的當前上下文 currentthread 獲取當前正在執行的執行緒 isalive 獲取乙...