出現此情況大多原因是使用了多線程編程,或者你所調用的dll使用了多線程。
我們知道,一般情況下的線程執行完指定的任務之后是會關閉了的,但是如果對於一些循環類線程,或者忘記關掉的線程時,這個時候就需要我們手動將之強制關閉。
用以下三個中的一個即可嘗試強制關閉線程。
但是這些方法都是強制關閉,那么我們如何使用Application.Exit();正常的關閉整個程序呢?
這個時候我們要引用下微軟對Application.Exit();的解釋了:
我們看的非常清楚,停止在所有線程上運行的所有消息循環,既然是所有,那又為何關閉不掉呢?這里我們要搞清楚一點的就是,新開的進程屬於另一個domain(域),你要搞清楚的是進程不等於線程,application.exit();是關閉當前進程的所有線程,不能關閉它創建的進程。新進程和本進程無任何關系。
所以,我們可以這樣理解Application.Exit();
所以,我們要想在當前進程上使用Application.Exit();關閉其他進程,就要把其他的進程設置為當前進程的后台進程(IsBackground),而當在主線程中創建了一個線程時,那么該線程的IsBackground默認是設置為FALSE的。當主線程退出的時候,IsBackground=FALSE的線程還會繼續執行下去,直到線程執行結束。只有IsBackground=TRUE的線程才會隨着主線程的退出而退出。當初始化一個線程,把Thread.IsBackground=true的時候,指示該線程為后台線程。后台線程將會隨着主線程的退出而退出。
因此我們在創建完進程之后要在后面加上一句:
然后它才可以被當前進程所控制,然后才可以用Application.Exit();結束。
本文由洗白白丶首發於51cto--.Net論壇,轉載請保留此段文字說明。