过去我通常会在KeyDown
子程序中加入以下行以结束我的应用程序:
If e.KeyCode = Keys.Escape Then End
然而,阅读了有关
End
实际操作的文档后,它可能是释放资源等方面最糟糕的应用程序终止方式之一。
因此,现在我正在尝试找到推荐的方法来终止应用程序,以正确处理所有资源等。我在这里找到了这两个问题 (here 和 here) ,但我无法得出正确的答案。
第一个链接上的 接受的答案说将 Close()
应用于所有窗体是正确的方法,并且会正确释放使用的所有资源。但是,在拥有多个窗体的应用程序中并不方便,甚至建议使用 Application.Exit()
,甚至:
Application.Exit()
End
即使第一行失败,也可以确保程序结束。
另一方面,在第二个链接上的被接受的答案说“在设计良好的应用程序中,您永远不需要调用 Application.Exit()
”,这与上述回答和下面的一个答案相矛盾,后者说 Application.Exit()
在较新版本的 .Net 中调用了所有窗体上的 Close()
。
这让我感到困惑——Application.Exit()
有什么问题吗?
如果没有问题,那么我是否正确地认为最好使用以下方法:
Application.Exit()
End
或者这样做有点过头了吗?否则,除非我编写取消它的代码,否则什么时候会导致
Application.Exit()
无法正常工作?注意:虽然这个问题适用于我所做的所有程序,包括具有多个表单的程序,但我最近开始使用套接字(使用
TcpClient/Listener
类)在计算机之间建立连接,并且在终止连接期间终止程序时,我会感激任何与此相关的附加信息。我在我的最近的问题中得到了一个评论,保证调用Socket.Close()
甚至不是必要的,但现在我意识到,在之前我使用End
来终止连接时,这可能并不完全正确。
End
来终止程序。如果调用End
,程序将立即被终止,没有优雅的垃圾回收(所有资源将由操作系统释放)。因此,如果想要连接优雅地关闭,更或者说你必须调用Socket.Close()
。但是,如果使用End
,也存在可能在套接字处理完成之前就提前终止执行的风险。因此,不推荐在应用发布时使用End
,仅在调试时使用。 - Visual VincentEnd
。顺便问一下,为什么修改问题?这只适用于 .net 吗? - Shuri2060