应用程序不会在未处理的异常时死亡

本文关键字:异常 未处理 应用程序 | 更新日期: 2023-09-27 18:34:25

如果我的应用程序最终出现我无法处理的异常,我希望它向用户显示错误消息并退出。问题是向用户显示一个异常对话框,其中包含选项"详细信息"、"继续"和"退出",如果用户单击"继续",应用程序将保持活动状态,而我不希望处于"某些"状态。

为了用最少的代码复制它,我刚刚创建了一个 Windows 窗体应用程序,添加了一个按钮,对于按钮单击代码,只需编写:

throw new ApplicationException("I must crash now!!!");
从调试文件夹、发布文件夹启动

编译的 exe 或从复制到其他地方的发布文件夹启动 exe 时(以防 pdb 文件导致问题(并单击按钮,我会看到详细信息/继续/退出对话框,如果我说继续,应用程序将保持活动状态。如何防止显示继续选项?

我的计算机(Vista,Visual Studio 2008,Visual Studio 2010,使用VS2010创建测试应用程序(和用户计算机(Windows 7(都有这种行为。

应用程序不会在未处理的异常时死亡

是 Windows 窗体捕获异常并显示要避免的对话框。您可以将 Windows 窗体配置为不使用 Application.SetUnhandledExceptionMode 方法执行此操作。

您需要为 AppDomain.UnhandledException 事件编写一个事件处理程序,在其中向用户显示更好的错误消息。

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

但请记住,异常可能意味着系统处于未定义状态,因此即使错误对话框也可能无法显示...您需要能够优雅地崩溃。

在应用程序的起点:

static void Main() {
    AppDomain currentDomain = AppDomain.CurrentDomain;
    currentDomain.UnhandledException += errorHandler;
    // Then start your app!
}
static void errorHandler(object sender, UnhandledExceptionEventArgs args) {
    // Show the user some error, but be prepared for disaster...
    // Examine the args.ExceptionObject (which is an Exception)
}