Close();与Application.Exit();的区别是什么?
Close() 与 Application.Exit() 的核心区别 两者并非完全相同,核心差异体现在以下几个方面:
作用范围不同
Close()是单个窗体的成员方法,仅会关闭调用它的那个窗体。如果应用只有主窗体,关闭主窗体确实会触发程序退出;但如果存在多个打开的窗体,调用子窗体的Close()只会关闭该子窗体,主程序仍会保持运行状态。事件触发与可控性不同
调用Close()时,会触发当前窗体的FormClosing和FormClosed事件,你可以在这些事件中添加逻辑——比如保存用户数据、弹出确认对话框,甚至通过FormClosingEventArgs.Cancel = true直接取消关闭操作。Application.Exit()是通知整个应用的消息循环终止,它会尝试关闭所有打开的窗体,每个窗体同样会触发FormClosing和FormClosed事件,但只要有任意一个窗体在FormClosing中取消关闭,Application.Exit()的退出操作就会失效,程序继续运行。退出逻辑的触发时机不同
若主窗体调用Close(),窗体关闭后应用的消息循环会终止,程序随之退出;但如果是非主窗体调用Close(),只有当最后一个窗体被关闭时,应用才会退出(默认行为)。Application.Exit()会直接启动全局退出流程,无论哪个窗体调用它,都会尝试关闭所有窗体后终止程序。特殊场景表现不同
在后台线程中直接调用Close()可能引发跨线程操作异常,而Application.Exit()可以在后台线程中调用(不过仍建议优先在UI线程执行此类操作)。另外,如果应用存在未标记为后台线程的长期运行线程,Application.Exit()终止消息循环后,这类线程可能会阻止程序完全退出;Close()关闭所有窗体后,同样需要这类线程结束才能让程序彻底退出。
简单总结:关闭单个窗体用 Close(),需要直接退出整个应用用 Application.Exit(),二者适用场景完全不同。
内容的提问来源于stack exchange,提问作者I_Cant_Code

