摘自MSDN
托管線程或者是后臺線程,或者是前臺線程。后臺線程不會使托管執行環境處于運行狀態,除此之外,后臺線程與前臺線程是一樣的。一旦所有前臺線程在托管進程(其中 .exe 文件是托管程序集)中被停止,系統將停止所有后臺線程并關閉。
| 注意 |
|---|
當運行庫因為進程關閉而停止某個后臺線程時,不會在該線程中引發異常。但是,當線程是因為 System.AppDomain.Unload(System.AppDomain) 方法卸載應用程序域而停止時,將同時在后臺和前臺線程中引發 ThreadAbortException。 |
請使用 Thread.IsBackground 屬性確定線程是后臺線程還是前臺線程,或更改其狀態。通過將其 IsBackground 屬性設置為 true,可在任何時候將線程更改為后臺線程。
| 要點 |
|---|
線程的前臺或后臺狀態不影響線程中未處理異常的結果。在 .NET Framework 2.0 版中,前臺或后臺線程中的未處理異常都將導致應用程序終止。請參見托管線程中的異常。 |
屬于托管線程池的線程(即其 IsThreadPoolThread 屬性為 true 的線程)是后臺線程。從非托管代碼進入托管執行環境的所有線程都被標記為后臺線程。通過創建并啟動新的 Thread 對象而生成的所有線程都默認為前臺線程。
如果使用一個線程監視活動(例如套接字連接),請將其 IsBackground 屬性設置為 true,以便該線程不會阻止進程終止。
意思是程序的主線程一旦關閉(主線程代碼執行體運行完畢,程序將關閉),后臺線程將別強制關閉,并不會引發異常。所以如果有后臺線程在運行,要保證前臺線程不會關閉。
新聞熱點
疑難解答