【发布时间】:2012-10-14 07:18:25
【问题描述】:
以下是我们可以退出应用程序的方式:
Environment.Exit(0)Application.Exit()Form.Close()
这三种方法有什么区别,什么时候使用?
【问题讨论】:
-
这不是一个重复的问题。我不是在问使用哪一个来退出应用程序。我只是询问这些方法之间的区别,因为它执行类似的操作。
标签: c# .net windows vb.net winforms
以下是我们可以退出应用程序的方式:
Environment.Exit(0)Application.Exit()Form.Close()这三种方法有什么区别,什么时候使用?
【问题讨论】:
标签: c# .net windows vb.net winforms
正确的方法是Application.Exit()。根据Documentation,它会终止所有消息循环并关闭所有窗口,从而使您的表单可以执行其清理代码(在 Form.OnClose 等中)。
Environment.Exit 只会杀死进程。如果某种形式有例如未保存的更改将没有机会询问用户是否要保存它们。资源(数据库连接等)也无法正确释放,文件可能无法刷新等。
Form.Close 就像它所说的那样:它关闭了一个表单。如果您打开了其他表单(可能不是现在,而是在您的应用程序的某个未来版本中),应用程序不会终止。
请记住,如果您使用多线程,Application.Exit() 不会终止您的线程(因此应用程序将继续在后台运行,即使 GUI 已终止)。因此,您必须采取措施杀死线程,无论是在主函数中(即Program.Main())还是在主窗体的OnClose 事件中。
【讨论】:
Thread.Join() 它,等到它真正完成后再打电话给Application.Exit()。您也可以致电Thread.Abort(),但这通常不是一个好的选择,应谨慎使用。搜索stackoverflow.com/questions/1051838/killing-a-net-thread之类的问题,我猜StackOverflow上有很好的答案...
他们都很好。
但form.Close() 不会关闭您的应用程序
它关闭表格,然后
主方法返回一个 int(退出代码)。
如果您希望您的应用程序使用退出代码退出,请使用
Environmet.Exit(exitcode) 或者在main-method中返回exitcode
【讨论】:
Dim forceExitTimer = New Threading.Timer(Sub() End, Nothing, 2500, Timeout.Infinite)
Application.Exit()
这个方法很完美,让软件先用application.exit轻轻关闭,然后再调用残酷的End命令强行关闭软件
【讨论】: