【问题标题】:Which is the proper way to end the execution of the application inside a constructor block?在构造函数块中结束应用程序执行的正确方法是什么?
【发布时间】:2014-08-18 03:34:18
【问题描述】:

我注意到,如果我尝试在构造函数子中使用 Application.Exit 指令,它不会产生任何效果,那么在这种情况下结束应用程序执行的正确方法应该是什么?

我知道我可以只使用应用程序事件来取消startup 事件,或者等待LoadShown 事件正确退出调用Application.Exit 方法的应用程序,但我在问这是为了在不使用End 语句的情况下学习在构造函数子中执行此操作的正确方法,以防万一。

这是一个例子:

Public Class Form1: Inherits Form

''' <summary>
''' Initializes a new instance of the <see cref="Form1"/> class.
''' </summary>
Public Sub New()

     Application.Exit
     ' End

End Class

【问题讨论】:

  • 我认为不会,它会引发“System.ObjectDisposedException”异常,Dispose 也是如此。感谢您的评论!
  • 我在 WPF 而不是 WinForms 上测试过的不好
  • Load += (s, e) =&gt; Close(); 或任何 VB 等价物怎么样,你只需要先让 sue Application.Run 完成加载

标签: .net vb.net winforms exit terminate


【解决方案1】:

Environment.Exit(0) 可以解决问题。

【讨论】:

  • 但这不是关于找到一个棘手的方法的问题,该方法的文档说它将立即终止该过程,我想这意味着与End 声明相同,而在另一方面,Application.Exit 方法通知应用程序必须终止,但等待必要的消息被处理然后终止它,所以,如果我没记错的话,Environment.Exit 应该和End 一样有害,但是我不太确定。
  • 区别在于Application.Exit只能在Application.Run被调用后才能被调用/使用。当您调用Application.Exit 并且它不起作用的原因是因为当您运行应用程序时的事件顺序(假设它只是一个winforms 应用程序)它在调用Application.Run 之前首先实例化表单。如果您的构造函数中有Application.Exit 代码,则尚未调用Application.Run。但是,当调用Environment.Exit 时,它会终止进程并向操作系统提供退出代码,因此您无需先调用 Run。
猜你喜欢
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2016-01-15
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2015-06-17
相关资源
最近更新 更多