C#程序如何捕捉未try/catch的异常——不弹“XXX已停止工作”报错框

诚意满满直接上代码:

static void Main(string[] args)
{
    //Main函数中增加此句
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}

并在Program类(Main函数所在类)中,增加如下函数即可:

        private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            Console.WriteLine(e.ExceptionObject.ToString());
            Environment.Exit(-1); //有此句则不弹异常对话框
        }

注意:如果在CurrentDomain_UnhandledException中只打印异常而不终止程序的话,该异常仍然会被抛出,最终还是会导致弹出“XXX已停止工作”的对话框,所以如果不想弹框让程序卡住的话就需要用第二句Environment.Exit或其他方式终止程序。当然此处除了向命令行输出异常外还可以保存当前数据或者其他灾难处理措施,但因为程序已经发生异常了,可能有些数据已经损坏,读取可能导致其他问题,要小心哦!

另外winform程序的话,对Application对象也要做一些设置,具体可以参考微软文档中的例子:https://msdn.microsoft.com/zh-cn/library/ms157905(v=vs.110).aspx

原文地址:https://www.cnblogs.com/roadbike/p/5808613.html