【发布时间】:2011-06-01 13:55:00
【问题描述】:
我假设Application.Exit 导致应用程序立即退出,但我可以看到,根据下面的示例,它将在 for 循环结束后退出。还有什么时候这个命令会强制应用退出?
for (int I = 0; I < 1000; I++)
{
if (I == 1)
Application.Exit();
}
【问题讨论】:
我假设Application.Exit 导致应用程序立即退出,但我可以看到,根据下面的示例,它将在 for 循环结束后退出。还有什么时候这个命令会强制应用退出?
for (int I = 0; I < 1000; I++)
{
if (I == 1)
Application.Exit();
}
【问题讨论】:
如您所见here,此方法“通知所有消息泵它们必须终止”和“此方法不会强制应用程序退出。”
【讨论】:
Application.Exit() 将导致应用程序在返回到底层消息泵后退出。如果您在 UI 线程中运行代码,那么直到您从您所在的任何 UI 方法(例如按钮单击处理程序)返回时才会执行此操作。
【讨论】:
问题是“我现在如何退出?”如果是这样,请使用 Environment.FailFast - 这是最快的方法,作为额外奖励,您可以在事件日志中留下一个条目。正如MSDN 所说,
这个方法终止一个进程 没有运行任何主动尝试/最终 块或终结器。
FailFast 方法写入消息 到 Windows 应用程序的字符串 事件日志,创建您的转储 应用程序,然后终止 当前进程。消息字符串是 也包括在错误报告中 微软。
使用 FailFast 方法而不是 终止您的退出方法 应用程序,如果你的状态 应用程序损坏无法修复, 并执行您的应用程序 try/finally 块和终结器将 损坏的程序资源。
【讨论】:
来自MSDN:
通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。
-
此方法不一定强制应用程序退出。 Exit 方法通常在消息循环中调用,并强制 Run 返回。要仅退出当前线程的消息循环,请调用 ExitThread。
【讨论】:
查看MSDN
Exit 方法停止所有线程上所有正在运行的消息循环并关闭应用程序的所有窗口。此方法不一定强制应用程序退出。 Exit 方法通常在消息循环中调用,并强制 Run 返回。要仅退出当前线程的消息循环,请调用 ExitThread。
【讨论】: