簡體   English   中英

如何退出所有正在運行的線程?

[英]How to exit all running threads?

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

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

您沒有在代碼中顯示任何線程的使用,但我們假設您確實有線程。 要關閉所有線程,您應該在啟動它們之前將它們全部設置為后台線程,然后在應用程序退出時自動關閉它們,例如:

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

微軟的“HOWTO:Stop Multiple Threads”一文: http//msdn.microsoft.com/en-us/library/aa457093.aspx

您可以嘗試以下代碼:

Environment.Exit(Environment.ExitCode);

我在我的軟件中遇到了類似的問題,但遺憾的是只是讓線程在后台運行並沒有解決問題。 事實上,當線程帶回數據(主軟件是數據驅動的),如果我關閉應用程序,它會導致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);

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

希望這可以幫助。

這適用於您打開的所有線程。

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

這完成了我的工作:

而不是使用:

Application.Exit() 

打開其他線程,嘗試使用:

Environment.Exit(Environment.ExitCode);

這是確保應用程序關閉(強制)的最佳方法:

(Process.GetCurrentProcess()).Kill()

Environment.Exit的問題是它不起作用,除非它在主線程上。 此外,它有時會線程鎖定。

程序未正確關閉的主要原因是因為表單無法自行處理(因此它所創建的所有對象)。 解決這個問題要困難得多。 我建議在等待一段時間之后運行上面的代碼,以便首先調用任何可能的dispose處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM