以下是退出应用程序的三种方法:
Environment.Exit(0)
Application.Exit()
Form.Close()
Environment.Exit(0)
Application.Exit()
Form.Close()
Application.Exit()
。根据文档,它终止所有消息循环并关闭所有窗口,从而使您的窗体有可能执行其清理代码(在Form.OnClose等中)。
Environment.Exit
将只会杀死进程。如果某个窗体例如有未保存的更改,则不会有任何机会询问用户是否要保存这些更改。此外,资源(如数据库连接等)可能无法正确释放,文件可能未被刷新等。
Form.Close
仅做其所述:关闭一个窗体。如果您打开了其他窗体(也许现在没有,但在您的应用程序的某个未来版本中可能会出现),则应用程序将不会终止。Application.Exit()
将不会终止您的线程(因此即使GUI已终止,应用程序仍将在后台工作)。因此,您必须采取措施来终止线程,或者在主函数(即Program.Main()
)或主窗体的OnClose
事件中终止线程。Thread.Join()
等待直到它真正完成并在之后调用 Application.Exit()
。您也可以尝试调用 Thread.Abort()
,但这通常不是一个好的选择,应该谨慎使用。搜索类似于 https://dev59.com/BnNA5IYBdhLWcg3wNa-T 的问题,我想在 StackOverflow 上有很好的答案... - MartinStettnerForm.Close
的注释是不正确的。如果主窗体关闭,整个应用程序也会随之关闭,而不会引发任何子窗体的 FormClosing
/FormClosed
事件。进程退出。另一方面,Application.Exit
允许你优雅地处理每个子窗体的关闭/已关闭事件。 - nawfalEnvironment.Exit(0)
。如果我使用了Application.Exit()
,应用程序仍然会继续运行。即使Application.Exit()
出现在Application.Run(new Form1())
之前也是如此! - Ed Graham它们都很好。
但是 form.Close()
不会关闭您的应用程序,它只会关闭窗体后,主方法将返回一个整数(退出代码)。
如果您希望应用程序使用退出代码退出,请使用Environmet.Exit(exitcode)
或在主方法中返回退出代码。