2010-04-22 51 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

相关问题