首页 新闻 会员 周边

winform全局异常捕获,为何不能100%捕获到,仍有部份错误被直接抛出了???

0
悬赏园豆:5 [待解决问题]

winform全局异常捕获,为何不能100%捕获到,仍有部份错误被直接抛出了???

全局异常捕获代码如下:

            //处理未捕获的异常   
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            //处理UI线程异常   
            Application.ThreadException += Application_ThreadException;
            //处理非UI线程异常   
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;



        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            var ex = e.ExceptionObject as Exception;
            if (ex != null)
            {
                MessageBox.Show(ex.Message, "系统异常", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            var ex = e.Exception;
            if (ex != null)
            {
                MessageBox.Show(ex.Message, "系统异常", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

仍有部份异常未能捕获到,造成.NET FRAMEWORK的报错,同时有些还导至程序异常退出。

求大神们指教,谢谢!

梦在旅途的主页 梦在旅途 | 初学一级 | 园豆:10
提问于:2017-04-14 10:39
< >
分享
所有回答(3)
0

这个并不是给你去做恢复的,这个只是告诉你这里有异常了,你准备下后事,处理完了我就退出了。

Daniel Cai | 园豆:10424 (专家六级) | 2017-04-14 10:45
0

少了一个,非UI线程不是UnHandledException

//设置应用程序处理异常方式:ThreadException处理
            Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
            //处理UI线程异常
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
            //处理未捕获的异常
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            //处理线程异常
            TaskScheduler.UnobservedTaskException += (sender, erro) =>
            {
                LogHelper.ErrorLog("多线程异常", erro.Exception);
                MessageBox.Show("程序出现异常(task):" + erro.Exception.ToString());
            };
为森 | 园豆:579 (小虾三级) | 2017-04-16 10:40
0

目前.net的处理策略是,非UI线程假如有异常会直接退出程序,UI线程异常可不退出。

ぁ丶泛滥的尐青春つ | 园豆:199 (初学一级) | 2017-05-06 16:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册