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