Application.Exit()結束程式,但線程還在的解決方案。

來源:互聯網
上載者:User

標籤: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()結束程式,但線程還在的解決方案。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.