关闭Windows窗体时,我可以使用:
this.Close();
Application.Exit();
Environment.Exit(0);
Environment.Exit(1);
Environment.Exit(-1);
这些选项有何不同?为什么我要用一个而不是另一个?
答案 0 :(得分:1)
这些直接来自MSDN的描述(以及一些额外的评论):
this/Form.Close(),在Form
实例的上下文中调用。
关闭表格。
请注意,这只会退出应用程序,如果它是应用程序中剩余的最后一个表单,并且没有其他前台线程在运行。
通知所有消息泵必须终止,然后在处理完消息后关闭所有应用程序窗口。
可以从应用程序中的任何位置调用的方法,该方法将终止前台线程上的所有消息泵。同样,这不会退出没有运行消息循环的其他前台线程,因此不能保证关闭应用程序。
带有可选退出代码的终止此过程并为底层操作系统提供指定的退出代码。
这会尝试通过结束在其中运行的所有线程来终止进程,然后将退出代码返回给操作系统。例如,这可以用于将故障状态返回到首先生成应用程序的批处理文件。这通常仅在需要强制终止进程时使用,如果必须等待线程结束,则可能不会立即关闭应用程序。
答案 1 :(得分:0)
当您调用Application.Run(mainForm)
标准应用程序消息循环开始在当前线程上运行时,将显示指定的表单。此方法还为Closed
事件的mainForm添加了一个事件处理程序。事件处理程序调用{{1}}来清理应用程序。 ExitThread
退出当前线程上的消息循环并关闭线程上的所有窗口。当您在主表单上调用Close
时会发生什么。
Application.Exit()
只会为ExitThread
属性所代表的每个表单引发FormClosing
事件。您可以以任何形式取消此活动。在这种情况下,Exit返回而不进一步操作。否则,为每个打开的表单引发OpenForms
事件,然后关闭所有正在运行的消息循环和表单。
Environment.Exit
终止进程(粗暴地)并为底层操作系统提供指定的退出代码。如果传递非零代码,则表示应用程序中发生了错误。这是杀死应用程序的最快方法。