应用程序不会因未处理的异常而死亡?

时间:2012-05-15 13:47:22

标签: c# .net winforms

如果我的应用程序最终出现异常,我无法处理,我希望它向用户显示错误消息并退出。问题是向用户显示了一个包含选项Details,Continue和Quit选项的异常对话框,如果用户单击Continue,则应用程序在“某种”状态下保持活动状态,这是我不想要的。

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

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

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

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

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

在您的申请的起点:

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)
}