相关疑难解决方法(0)

为什么Application.Exit无法正常工作?

我有一个应用程序,取消对话框时出现奇怪的错误.如果该框被取消,则该应用程序无法继续,因此它会退出,但由于某种原因它无法正常工作,因此它会继续运行并崩溃.

我调试了这个问题,不知怎的,应用程序运行在Application.Exit调用之后.我正在调试模式下运行,这是相关的,因为少量代码依赖于定义的RELEASE变量.这是我的应用退出代码.我已经跟踪了代码并且它进入了ExitApp方法,并继续运行,将控制权返回给调用者并最终崩溃.

这是一个通过远程桌面连接提供报告的应用程序,这就是退出代码有点奇怪的原因.它试图终止远程会话,但只有在发布时运行,因为我不想在每次测试运行时关闭我的开发机器.

    private void ExitApp()
    {
        HardTerminalExit();
        Application.Exit();
    }

    // When in Debug mode running on a development computer, this will not run to avoid shutting down the dev computer
    // When in release mode the Remote Connection or other computer this is run on will be shut down.
    [Conditional("RELEASE")]
    private void HardTerminalExit()
    {
        WTSLogoffSession(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, false);
    }
Run Code Online (Sandbox Code Playgroud)

我在Application.Exit行之后运行了一个调试器,没有任何反应,然后控制在我跳过该行后返回调用者.

这是怎么回事?这是一个Windows窗体应用程序.

.net c# winforms

26
推荐指数
3
解决办法
4万
查看次数

停止执行C#代码

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

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

c# wpf winforms

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×2

winforms ×2

.net ×1

wpf ×1