App.Exit不会立即退出?

问题描述:

我认为Application.Exit导致应用程序退出imemdiately,但我可以看到,根据下面的示例,它将在for循环结束后退出。此外,当这个命令将强制应用程序退出?App.Exit不会立即退出?

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

Application.Exit()将导致应用程序返回到基础消息泵后退出。如果你在UI线程中运行的代码,这会不会是,直到你从你在任何UI方法返回

正如你可以看到here,这种方法“通知所有消息泵必须终止”和“此方法不强制应用程序退出。”

MSDN(如按钮单击处理程序。):

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

-

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

检查MSDN

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

问题“我现在怎么退出?”如果是这样,请使用Environment.FailFast - 这是最快的出路,作为额外的奖励,您可以在事件日志中留下条目。由于它说MSDN

这种方法终止进程 没有运行任何活动的try /终于 块或终结。

故障快速转移方法的消息 字符串写入Windows应用程序 事件日志,创建您的应用程序 的转储,然后终止 当前进程。邮件字符串为 也包含在向Microsoft提供的 错误报告中。

使用FAILFAST方法,而不是 退出方法来终止您 应用程序如果您 应用程序的状态被损坏无法修复, 和执行应用程序的 的try/finally块和终结将 腐败的节目资源。

+0

请注意,FailFast本质上等同于强制进程从任务管理器关闭,并会导致显示经典的丑陋Windows错误消息。它只能在极端情况下使用(例如UI线程死锁)。 – 2011-06-01 15:25:50

+0

@丹 - 同意,这是一个很好的投掷你的手中的空气和保释技术,当有人点击退出按钮时不会运行。测试WER或重启/恢复代码也很棒。 – 2011-06-01 15:27:46