C# 为什么我要用一种方式关闭一个表单而不是另一个?

C# 为什么我要用一种方式关闭一个表单而不是另一个?,c#,winforms,C#,Winforms,关闭windows窗体时,我可以使用: this.Close() Application.Exit() Environment.Exit(0) Environment.Exit(1) Environment.Exit(-1) 这些选项之间有什么区别?为什么我要使用一个而不是另一个?当您调用应用程序运行(mainForm)标准应用程序消息循环开始在当前线程上运行时,将显示指定的表单。此外,此方法还将事件处理程序添加到Closed事件的主窗体中。事件处理程序调用ExitThread清理应用程序E

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

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

这些选项之间有什么区别?为什么我要使用一个而不是另一个?

当您调用
应用程序运行(mainForm)
标准应用程序消息循环开始在当前线程上运行时,将显示指定的表单。此外,此方法还将事件处理程序添加到
Closed
事件的主窗体中。事件处理程序调用
ExitThread
清理应用程序
ExitThread
退出当前线程上的消息循环,并关闭线程上的所有窗口。这就是调用主窗体时发生的情况

只需为
OpenForms
属性表示的每个表单引发
FormClosing
事件。您可以以任何形式取消此事件。在这种情况下,退出返回,无需进一步操作。否则,将为每个打开的表单引发
FormClosed
事件,然后关闭所有正在运行的消息循环和表单


终止进程(残酷地)并向底层操作系统提供指定的退出代码。如果传递非零代码,则表明应用程序中发生了错误。这是终止应用程序的最快方法。

以下是直接从MSDN中获得的对这些方法的描述(以及一些额外的注释):

(),从
表单
实例的上下文中调用

关闭窗体

请注意,只有当应用程序中最后一个窗体保持打开状态,并且没有其他前台线程运行时,才会退出应用程序

()

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

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

(),带有可选的退出代码

终止此进程并向基础操作系统提供指定的退出代码


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

您是否阅读了MSDN的说明,并选中此项?第一项是关闭表单。剩下的就是结束你的申请。在这里抓住它们-1,因为这个问题没有显示对每个方法的文档的任何研究工作。