【发布时间】:2011-06-25 23:19:06
【问题描述】:
有时,当我在调试程序时使用 Form.close() 时,虽然窗体已关闭,但应用程序仍在运行。我在使用 msgbox 函数时注意到了这种行为。
我没有运行线程或计时器,那么关闭 .NET 应用程序的最佳方法是什么?我正在使用 VB.NET。
谢谢
【问题讨论】:
有时,当我在调试程序时使用 Form.close() 时,虽然窗体已关闭,但应用程序仍在运行。我在使用 msgbox 函数时注意到了这种行为。
我没有运行线程或计时器,那么关闭 .NET 应用程序的最佳方法是什么?我正在使用 VB.NET。
谢谢
【问题讨论】:
Application.Exit() 会杀死您的应用程序,但在某些情况下它不会关闭应用程序。
End 优于 Application.Exit()。
【讨论】:
只需在代码中添加“End”关键字即可。
Sub Form_Load()
Dim answer As MsgBoxResult
answer = MsgBox("Do you want to quit now?", MsgBoxStyle.YesNo)
If answer = MsgBoxResult.Yes Then
MsgBox("Terminating program")
End
End If
End Sub
【讨论】:
如果你在一个循环中(Do While, For, ...)并且你调用Me.Close(),你应该跟随一个退出命令(Exit Do, ...)或Return()来强制消息处理以正确终止。我发现程序因此而挂起。
【讨论】:
你描述的情况很可疑。每当您关闭程序的启动表单时,整个应用程序都应该自动退出,包括关闭所有其他打开的表单。确保您关闭了正确的表单,并且您应该不会遇到任何问题。
另一种可能性是您已将项目(使用其属性页面)更改为在关闭所有 个打开的窗口之前关闭。在此模式下,您的应用程序将在 最后 个剩余打开的表单关闭之前退出。如果您选择了此设置,则必须确保调用了您在应用过程中显示的所有表单的Close 方法,而不仅仅是启动/主表单。
第一个设置是默认设置是有原因的,如果您更改了它,您可能想重新修复它。
到目前为止,它是正常应用程序中最直观的模型,并且可以完全防止您描述的情况。要使其正常工作,请确保您已将 主 表单指定为“启动表单”(而不是启动屏幕或登录表单)。
我所说的设置在这里突出显示:
但首先,请注意您永远不必在设计合理的应用程序中调用Application.Exit。如果您发现自己必须这样做才能完全关闭您的程序,那么您做错了什么。只要你有充分的理由,这样做本身并不是一个坏习惯。其他两个答案无法解释这一点,因此我觉得充其量是不完整的。
【讨论】:
在 .Net 1.1 及更早版本中,Application.Exit was not a wisechoice 和 MSDN 文档特别建议不要这样做,因为所有消息处理都会立即停止。
然而,在以后的版本中,calling Application.Exit 将导致在应用程序中所有打开的表单上调用 Form.Close,从而让您有机会自行清理,甚至一起取消操作。
【讨论】:
Application.Exit才能正确退出。就目前而言,您的答案是正确的,但还远远不够。
Application.Exit 实际上会解决这个问题,很多人会停在那里。 (可能发生在这里,看到你的答案被接受了。)这显然不是你的错,但这是我试图记住的事情。大多数人确实盲目地选择使用任何“有效”的东西而不考虑原因。不幸,但真实。
Form.Close() 用于在 .NET 应用程序中关闭 Form 的实例,它不会杀死整个应用程序。 Application.exit() 杀死你的应用程序。
【讨论】: