是否有一个设置阻止未处理的异常对话框显示在我编译的应用程序中?

cra*_*231 6 .net c# visual-studio-2010

我不确定这是否是正确的地方,但无论如何我都会.

我有2个.NET应用程序; 一个是我自己编写的,另一个不是.两者都使用.NET Framework 4.5.但他们处理不同的例外.

在我没有编译的应用程序中; 它显示了未处理的异常对话框(我希望和期望)

来自应用程序的未处理异常我没有编译

但在我编译的应用程序中; 它只是表明应用程序崩溃了;

从我编译的应用程序未处理的Exepction

所以VS配置或项目配置中必须有一个设置阻止未处理的异常对话框在我编译的应用程序中显示?...

我尝试重新安装VS,更改Debug-> Exceptions菜单中的设置,两者都没有...

Han*_*ant 12

顶部屏幕截图是ThreadExceptionDialog.它显示在一个非常特殊的情况下,Winforms应用程序在由消息循环(Application.Run)触发的事件处理程序中炸弹,并且应用程序没有重新分配Application.ThreadException事件处理程序.使用它不是一个很好的做法,用户无法确定是否单击"继续"或"退出"按钮.一定要调用Application.SetUnhandledExceptionMode()来禁用它.

底部屏幕截图是默认的Windows错误报告对话框,当程序遭遇未处理的异常时,由Windows显示.你永远不应该让它达到这一点,对话框没有显示足够的信息来帮助任何人诊断和解决问题.始终为AppDomain.CurrentDomain.UnhandledException事件编写事件处理程序.显示和/或记录e.ExceptionObject.ToString()并调用Environment.Exit()来终止应用程序.

使您的Program.cs源代码看起来类似于:

    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        Application.Run(new Form1());
    }

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
        // TODO: improve logging and reporting
        MessageBox.Show(e.ExceptionObject.ToString());
        Environment.Exit(-1);
    }
Run Code Online (Sandbox Code Playgroud)