0
當一個.NET進程主線程完成時,其他當前正在執行的線程會發生什麼?如果他們已經分配了必須在他們停止之前處置的非託管資源呢?當.NET進程主線程完成時,其他當前正在執行的線程會發生什麼?
當一個.NET進程主線程完成時,其他當前正在執行的線程會發生什麼?如果他們已經分配了必須在他們停止之前處置的非託管資源呢?當.NET進程主線程完成時,其他當前正在執行的線程會發生什麼?
如果其他線程具有Thread.IsBackground設置爲true,他們將立即退出。否則,應用程序將繼續運行(如果它是WinForms或WPF應用程序,則不可見)。
如果其他線程擁有非託管資源,這些通常會被關閉/由操作系統發佈的時候退出進程(文件句柄等可能有例外的情況,我不熟悉)。當您檢測到應用程序正在退出時,仍然最好手動釋放這些資源。
謝謝克里斯! – 2012-08-01 14:17:19
'當您檢測到應用程序正在退出的事實時,仍然最好手動釋放這些資源。'爲什麼?如果操作系統無論如何要這樣做,爲什麼重複努力,除非它是絕對必要的(並且經常不能有效/正確地做到這一點)。當進程退出 – 2012-08-01 14:38:09
@MartinJames因爲,這些非託管資源將要由OS上***極端偏見清理***。你在寫作中的文件可以在不一致的狀態,網絡流可以不通知對方被關閉,等你通常想知道什麼時候該過程已經結束,並試圖保存以有意義的方式端子狀態。 – 2012-08-01 14:53:44