zoukankan      html  css  js  c++  java
  • WPF 捕捉全局异常

    public App()
            {
                //首先注册开始和退出事件
                this.Startup += new StartupEventHandler(App_Startup);
                this.Exit += new ExitEventHandler(App_Exit);
            }
    
            void App_Startup(object sender, StartupEventArgs e)
            {
                //UI线程未捕获异常处理事件
                this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
                //Task线程内未捕获异常处理事件
                TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
                //非UI线程未捕获异常处理事件
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            }
    
            void App_Exit(object sender, ExitEventArgs e)
            {
                //程序退出时需要处理的业务
            }
    
            void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
            {
                try
                {
                    e.Handled = true; //把 Handled 属性设为true,表示此异常已处理,程序可以继续运行,不会强制退出      
                    MessageBox.Show("UI线程异常:" + e.Exception.Message);
                }
                catch (Exception ex)
                {
                    //此时程序出现严重异常,将强制结束退出
                    MessageBox.Show("UI线程发生致命错误!");
                }
    
            }
    
            void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                StringBuilder sbEx = new StringBuilder();
                if (e.IsTerminating)
                {
                    sbEx.Append("非UI线程发生致命错误");
                }
                sbEx.Append("非UI线程异常:");
                if (e.ExceptionObject is Exception)
                {
                    sbEx.Append(((Exception)e.ExceptionObject).Message);
                }
                else
                {
                    sbEx.Append(e.ExceptionObject);
                }
                MessageBox.Show(sbEx.ToString());          
            }
    
            void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
            {
                //task线程内未处理捕获
                MessageBox.Show("Task线程异常:" + e.Exception.Message);
                e .SetObserved();//设置该异常已察觉(这样处理后就不会引起程序崩溃)
            }

    使用方法: public partial class App : Application  {  //复制到App类里面 }

    每天进步一点点。
  • 相关阅读:
    《构建之法》第五章读后感
    《构建之法》第四章读后感
    《构建之法》第三章读后感
    《构建之法》第二章读后感
    《构建之法》第一章读后感
    web mis系统构建
    异常
    多态
    接口与继承
    个人总结_5.8
  • 原文地址:https://www.cnblogs.com/snow-zhang/p/10107108.html
Copyright © 2011-2022 走看看