我有一个应用程序在取消对话框时出现奇怪的错误。如果该框被取消,应用程序将无法继续,因此它会退出,但由于某种原因它无法工作,因此它会继续运行并崩溃。
我调试了这个问题,并且不知何故应用程序在 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(使用前将#替换为@)