我有一个应用程序,取消对话框时出现奇怪的错误.如果该框被取消,则该应用程序无法继续,因此它会退出,但由于某种原因它无法正常工作,因此它会继续运行并崩溃.
我调试了这个问题,不知怎的,应用程序运行在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窗体应用程序.
我正在玩一些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(因此标签)尝试相同的原理,工作原理相同.
任何人都可以提供解释或解决方案吗?