停止执行C#代码

我正在玩一些C# Winforms / WPF代码,偶然发现了一些奇怪的东西.
假设我有这样的代码
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(因此标签)尝试相同的原理,工作原理相同.

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

解决方法

只是尝试在你的情况下使用Environment.Exit(-1),一切都会很好.

补充:这是我能为您提供的最佳参考.

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中作为最后的手段使用.它还可用于从控制台应用程序突然退出.

另一参考文献:How to properly exit a C# application?

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...