4

如果我的应用程序以我无法处理的异常结束,我希望它向用户显示错误消息并退出。问题是向用户显示了一个异常对话框,其中包含详细信息、继续和退出选项,如果用户单击继续,则应用程序会在我不想要的“某些”状态下保持活动状态。

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

throw new ApplicationException("I must crash now!!!");

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

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

4

2 回答 2

5

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

于 2012-05-15T14:03:55.407 回答
3

您需要为事件编写一个事件处理程序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)
}
于 2012-05-15T13:50:51.007 回答