App.Exit不能立即退出?

8

我曾认为 Application.Exit 会立即退出应用程序,但是从下面的示例中可以看出,它将在 for 循环结束后退出。此命令何时强制应用程序退出?

for (int I = 0; I < 1000; I++)
{
    if (I == 1)
        Application.Exit();
}
5个回答

9

如你所见这里,该方法“通知所有消息泵它们必须终止”但是“该方法不会强制应用程序退出。”


6

Application.Exit()会在返回到底层消息泵后导致应用程序退出。如果您正在UI线程中运行代码,这将要等到您从任何UI方法中返回(例如按钮单击处理程序)。


3
如果问题是“如何立即退出?”,那么请使用Environment.FailFast--这是最快的退出方式,而且额外的奖励是可以在事件日志中留下一个条目。 正如MSDN所说,
此方法终止进程,而不运行任何活动的try / finally块或终结器。
FailFast方法将消息字符串写入Windows应用程序事件日志,创建应用程序的转储,然后终止当前进程。 消息字符串也包含在向Microsoft的错误报告中。
如果应用程序的状态已经损坏到无法修复,并且执行应用程序的try / finally块和终结器会破坏程序资源,请使用FailFast方法代替Exit方法终止应用程序。

请注意,FailFast基本上相当于从任务管理器强制关闭进程,并会导致经典丑陋的Windows错误消息显示。它应仅在极端情况下使用(例如UI线程死锁)。 - Dan Bryant
@Dan - 我同意,这是一种不得已而为之的好技巧,但不能在某人点击“退出”按钮时运行。它也非常适用于测试WER或重启/恢复代码。 - Kate Gregory

2

来自 MSDN:

通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。

-

这个方法不一定强制应用程序退出。Exit方法通常从消息循环内部调用,并强制Run返回。要仅退出当前线程的消息循环,请调用ExitThread。


1

请查看MSDN

Exit方法会停止所有线程上运行的消息循环并关闭应用程序的所有窗口。但是,该方法不一定强制应用程序退出。通常在消息循环内部调用Exit方法,并强制Run方法返回。要仅退出当前线程的消息循环,请调用ExitThread。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接