標籤:environ -- 說明 AC etc ref ica app 解決方案
Application.Exit()結束程式,但線程還在的解決方案。
出現此情況大多原因是使用了多線程編程,或者你所調用的dll使用了多線程。
我們知道,一般情況下的線程執行完指定的任務之後是會關閉了的,但是如果對於一些迴圈類線程,或者忘記關掉的線程時,這個時候就需要我們手動將之強制關閉。
用以下三個中的一個即可嘗試強制關閉線程。
複製內容到剪貼簿代碼:
Application.ExitThread();//退出當前線程上的訊息迴圈,並關閉該線程上的所有視窗。
複製內容到剪貼簿代碼:
System.Environment.Exit(0);
//終止當前進程並為基礎作業系統提供指定的結束代碼
複製內容到剪貼簿代碼:
Process.GetCurrentProcess().Kill();//終止當前正在啟動並執行線程
但是這些方法都是強制關閉,那麼我們如何使用Application.Exit();正常的關閉整個程式呢?
這個時候我們要引用下微軟對Application.Exit();的解釋了:
複製內容到剪貼簿代碼:
Application.Exit();// 方法停止在所有線程上啟動並執行所有訊息迴圈,並關閉應用程式的所有視窗
我們看的非常清楚,停止在所有線程上啟動並執行所有訊息迴圈,既然是所有,那又為何關閉不掉呢?這裡我們要搞清楚一點的就是,新開的進程屬於另一個domain(域),你要搞清楚的是進程不等於線程,application.exit();是關閉當前進程的所有線程,不能關閉它建立的進程。新進程和本進程無任何關係。
所以,我們可以這樣理解Application.Exit();
複製內容到剪貼簿代碼:
Application.Exit();// 方法停止在當前進程上的所有線程上啟動並執行所有訊息迴圈,並關閉當前進程上的應用程式的所有視窗。
所以,我們要想在當前進程上使用Application.Exit();關閉其他進程,就要把其他的進程設定為當前進程的後台進程(IsBackground),而當在主線程中建立了一個線程時,那麼該線程的IsBackground預設是設定為FALSE的。當主線程退出的時候,IsBackground=FALSE的線程還會繼續執行下去,直到線程執行結束。只有IsBackground=TRUE的線程才會隨著主線程的退出而退出。當初始化一個線程,把Thread.IsBackground=true的時候,指示該線程為後台線程。後台線程將會隨著主線程的退出而退出。
因此我們在建立完進程之後要在後面加上一句:
複製內容到剪貼簿代碼:
IsBackground=true;
然後它才可以被當前進程所控制,然後才可以用Application.Exit();結束。
本文由洗白白丶首發於51cto--.Net論壇,轉載請保留此段文字說明。
http://bbs.51cto.com/thread-970057-1.html
Application.Exit()結束程式,但線程還在的解決方案。