为什么 Application.Exit 无法工作?

2024-05-15

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

我调试了这个问题,并且不知何故应用程序在 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);
    }

我已经在 Application.Exit 行之后运行了调试器,但没有任何反应,然后在我越过该行后控制权返回给调用者。

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


这篇文章扩展了您正在经历的同样的思路:http://www.dev102.com/2008/06/24/how-do-you-exit-your-net-application/ http://www.dev102.com/2008/06/24/how-do-you-exit-your-net-application/

基本上:

  • Environment.Exit - 来自 MSDN:终止此进程并给出 底层操作系统 指定的退出代码。这是代码 当您使用控制台时调用 应用。

  • Application.Exit - 来自 MSDN:通知所有消息泵它们 必须终止,然后关闭所有 消息后的应用程序窗口 已被处理。这是代码 如果您接到电话,请使用 应用程序.运行(WinForms 应用程序),此方法停止所有 在所有线程上运行消息循环 并关闭所有窗口 应用。还有一些 有关此方法的问题,请阅读 它在 MSDN 页面中。

对此的另一个讨论:Link https://web.archive.org/web/20201029173358/http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

这篇文章指出了一个很好的提示:

您可以通过检查 System.Windows.Forms.Application.MessageLoop 属性来确定是否已调用 System.Windows.Forms.Application.Run。如果为 true,则已调用 Run,并且您可以假设 WinForms 应用程序正在执行,如下所示。

if (System.Windows.Forms.Application.MessageLoop)
{
  // Use this since we are a WinForms app
  System.Windows.Forms.Application.Exit();
}
else
{
  // Use this since we are a console app
  System.Environment.Exit(1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Application.Exit 无法工作? 的相关文章

随机推荐