我正在玩一些C#Winforms/WPF代码,偶然发现了一些奇怪的东西.假设我有这样的代码:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DoSomething();
// maybe something more if everything went ok
}
}
Run Code Online (Sandbox Code Playgroud)
令我困惑的是,我不能简单地在构造函数完成其工作之前从方法DoSomething关闭应用程序.如果在执行过程中出现任何问题DoSomething,我需要立即关闭应用程序,但它只是继续运行,执行部件// maybe something more...然后关闭,但这对我来说太迟了.
我必须在构造函数本身中使用以下内容放置关闭表单的代码return;然后它可以工作,但我真的没有找到一个可接受的解决方案.我试图将这样的验证逻辑从构造函数移动到我的方法.
我尝试过类似的东西
public void DoSomething()
{
Close();
}
Run Code Online (Sandbox Code Playgroud)
要么
public void DoSomething()
{
Application.Current.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.是的,两个代码都会关闭应用程序,但仅在完成构造函数代码之后.
Why我需要这样的东西吗?好吧,因为在启动时我需要检查各种事情,比如连接和硬件的可用性,验证用户等,如果有任何失败,就没有必要执行更多的代码.
使用Winforms和WPF(因此标签)尝试相同的原理,工作原理相同.
任何人都可以提供解释或解决方案吗?
只是尝试Environment.Exit(-1)在你的情况下使用,一切都会很好.
补充: 这是我能为您提供的最佳参考.
vs vs之间的区别Application.ExitApplication.ShutdownEnvironment.Exit
Application.Exit()用于以优雅的方式退出Windows窗体应用程序.基本上,它会停止消息泵,关闭所有窗口,并在调用Application.Run()之后立即返回Main()方法.但是,有时它似乎不起作用 - 这通常是因为还有其他前台线程(除了UI线程)仍在运行,这阻止了线程结束.
Application.Shutdown()(广泛地)是WPF应用程序中Application.Exit()的等价物.但是,您可以设置ShutDownMode,以便在主窗口关闭,最后一个窗口关闭或仅在调用此方法时关闭应用程序.
Environment.Exit()杀死所有正在运行的线程,并且进程本身就已经死了.当更优雅的方法由于某种原因不起作用时,这应仅在WF或WPF中作为最后的手段使用.它还可用于从控制台应用程序突然退出.
另一个参考:如何正确退出C#应用程序?