停止执行C#代码

wal*_*her 6 c# wpf winforms

我正在玩一些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(因此标签)尝试相同的原理,工作原理相同.

任何人都可以提供解释或解决方案吗?

Fur*_*dar 8

只是尝试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#应用程序?