[英]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.