2010-04-22 87 views
41

以下代碼不會退出應用程序。我如何退出應用程序並確保所有正在運行的線程都已關閉?如何退出所有正在運行的線程?

foreach (Form form in Application.OpenForms) 
{ 
    form.Close(); 
} 
Application.Exit(); 
+0

@monkey_boys你在哪裏使用的線程你的代碼? – Kiril 2010-04-22 07:46:13

回答

69

您不會在代碼中顯示任何線程的使用,但假設您的線程中有線程。

Thread myThread = new Thread(...); 
myThread.IsBackground = true; // <-- Set your thread to background 
myThread.Start(...); 

A「HOWTO:停止多線程」從微軟的文章要關閉所有線程,你應該所有的人設置爲後臺線程你開始之前,那麼他們將被自動應用程序退出時,如關閉:http://msdn.microsoft.com/en-us/library/aa457093.aspx

45

你可以試試下面的代碼:

Environment.Exit(Environment.ExitCode); 
13

這應該爲你打開的所有線程都在工作。

protected override void OnExiting(Object sender, EventArgs args) 
{ 
    base.OnExiting(sender, args); 
    Environment.Exit(Environment.ExitCode); 
} 
7

我在我的軟件中經歷了類似的問題,但不幸的是只是讓線程在後臺工作並沒有解決問題。事實上,當線程返回數據(主要軟件是數據驅動的),並且如果我關閉應用程序,則會導致Windows錯誤,從而產生調試消息。

那麼什麼是真正爲我工作:

第1步:的所有線程在後臺運行,如

Thread aThread = new Thread(MethodName); 
aThread.IsBackground = true; //<-- Set the thread to work in background 
aThread.Start(); 

步驟2:在窗體/應用程序調用的閉合動作Environment.Exit方法,如

Environment.Exit(Environment.ExitCode); 

這使內存管理pe完美無缺,沒有內存泄漏。

希望這會有所幫助。

1

這讓我所做的工作:

而不是使用:這讓其他線程開放

Application.Exit() 

,請嘗試使用:

Environment.Exit(Environment.ExitCode); 
+0

對不起,我不想重複。 Somdip Dey的回答讓它爲我工作。 – Jimmy 2017-07-25 16:27:45

相關問題