为什么我要使用一种方式关闭另一种形式?

时间:2012-12-21 09:11:32

标签: c# winforms

关闭Windows窗体时,我可以使用:

  • this.Close();
  • Application.Exit();
  • Environment.Exit(0);
    Environment.Exit(1);
    Environment.Exit(-1);

这些选项有何不同?为什么我要用一个而不是另一个?

2 个答案:

答案 0 :(得分:1)

这些直接来自MSDN的描述(以及一些额外的评论):

this/Form.Close(),在Form实例的上下文中调用。

  

关闭表格。

请注意,这只会退出应用程序,如果它是应用程序中剩余的最后一个表单,并且没有其他前台线程在运行。

Application.Exit()

  

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

可以从应用程序中的任何位置调用的方法,该方法将终止前台线程上的所有消息泵。同样,这不会退出没有运行消息循环的其他前台线程,因此不能保证关闭应用程序。

带有可选退出代码的

Environment.Exit()。

  

终止此过程并为底层操作系统提供指定的退出代码。

这会尝试通过结束在其中运行的所有线程来终止进程,然后将退出代码返回给操作系统。例如,这可以用于将故障状态返回到首先生成应用程序的批处理文件。这通常仅在需要强制终止进程时使用,如果必须等待线程结束,则可能不会立即关闭应用程序。

答案 1 :(得分:0)

当您调用Application.Run(mainForm)标准应用程序消息循环开始在当前线程上运行时,将显示指定的表单。此方法还为Closed事件的mainForm添加了一个事件处理程序。事件处理程序调用{​​{1}}来清理应用程序。 ExitThread退出当前线程上的消息循环并关闭线程上的所有窗口。当您在主表单上调用Close时会发生什么。

Application.Exit()只会为ExitThread属性所代表的每个表单引发FormClosing事件。您可以以任何形式取消此活动。在这种情况下,Exit返回而不进一步操作。否则,为每个打开的表单引发OpenForms事件,然后关闭所有正在运行的消息循环和表单。

Environment.Exit终止进程(粗暴地)并为底层操作系统提供指定的退出代码。如果传递非零代码,则表示应用程序中发生了错误。这是杀死应用程序的最快方法。