Application.Exit()到底退出了什么
2010-06-09 12:37
267 查看
遇到一个unhandled exception的bug,查找原因后发现Application.Exit()之后的代码也会被执行,
if (attemptsCount > attemptsMax)
{
Application.Exit();
}
WMainForm form = new WMainForm();
... more initializations ...
Application.Run(form);
不由对Application.Exit()的用法产生了困惑,难道Application.Exit()不是退出整个应用程序吗?通过查MSDN得知:
Exit停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。该方法并不强制退出该应用程序。Exit方法通常从一个消息循环内调用,该方法强制Run返回。若要只退出当前线程的某个消息循环,请调用ExitThread。
Exit引发下列事件并执行关联的条件操作:
* 为OpenForms属性表示的各个窗体引发FormClosing事件。可以通过将这些窗体的FormClosingEventArgs参数的Cancel属性设置为true,取消此事件。
* 如果多个处理程序的其中之一取消该事件,则Exit将返回而无进一步操作。否则,将为每个打开的窗体引发FormClosed事件,然后关闭所有正在运行的消息循环和窗体。
也就是说Exit会引发被应用程序打开的所有窗体的FormClosing和FormClosed事件。而且,如果某个窗口的FormClosingEventArgs参数的Cancel属性被设置为true,那么Exit将不会关闭所有窗口和停止所有的消息循环。
从上面可以知道Application.Exit()并不强制退出应用程序,要想强制退出整个应用程序要用Environment.Exit():终止当前进程并为基础操作系统提供指定的退出代码。
if (attemptsCount > attemptsMax)
{
Application.Exit();
}
WMainForm form = new WMainForm();
... more initializations ...
Application.Run(form);
不由对Application.Exit()的用法产生了困惑,难道Application.Exit()不是退出整个应用程序吗?通过查MSDN得知:
Exit停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。该方法并不强制退出该应用程序。Exit方法通常从一个消息循环内调用,该方法强制Run返回。若要只退出当前线程的某个消息循环,请调用ExitThread。
Exit引发下列事件并执行关联的条件操作:
* 为OpenForms属性表示的各个窗体引发FormClosing事件。可以通过将这些窗体的FormClosingEventArgs参数的Cancel属性设置为true,取消此事件。
* 如果多个处理程序的其中之一取消该事件,则Exit将返回而无进一步操作。否则,将为每个打开的窗体引发FormClosed事件,然后关闭所有正在运行的消息循环和窗体。
也就是说Exit会引发被应用程序打开的所有窗体的FormClosing和FormClosed事件。而且,如果某个窗口的FormClosingEventArgs参数的Cancel属性被设置为true,那么Exit将不会关闭所有窗口和停止所有的消息循环。
从上面可以知道Application.Exit()并不强制退出应用程序,要想强制退出整个应用程序要用Environment.Exit():终止当前进程并为基础操作系统提供指定的退出代码。
相关文章推荐
- return x与exit(x)到底有什么区别
- .net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
- Application.Exit()并不是在什么地方都能终止程序的运行
- .net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
- 【转载】winform退出代码:Application.Exit()和System.Environment.Exit(0) 的区别
- .net强制退出主窗口的方法——Application.Exit()方法和System.Environment.Exit(System.Environment.ExitCode)
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- .net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
- winform退出代码:Application.Exit和Environment.Exit(0)
- android 完全退出应用程序 使用ExitApplication.
- c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);
- winform退出代码:Application.Exit和Environment.Exit(0)
- android 到底是什么决定了app的名称 application label activity label
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- Application.Exit()方法和System.Environment.Exit(System.Environment.ExitCode) :.net强制退出主窗口的方法
- .net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
- .net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
- C# 强制退出WinForm程序之Application.Exit和Environment.Eixt(转载)
- 强制退出WinForm程序之Application.Exit和Environment.Eixt
- 强制退出WinForm程序之Application.Exit和Environment.Eixt