• WPF 捕捉全局异常


    参考:https://www.cnblogs.com/snow-zhang/p/10107108.html

    写在App.xaml.cs中

     void App_OnStartup(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();//设置该异常已察觉(这样处理后就不会引起程序崩溃)
            }

    完善一下

     private void App_OnStartup(object sender, StartupEventArgs e)
            {
                InitExceptionHandle();
            }
            public static void Close(int exitCode = 0)
            {
                Environment.Exit(exitCode);
            }
            private static void OnUnhandledException(Exception e)
            {
                App.Current.Dispatcher.Invoke(() =>
                {
                    lock (App.Current)
                    {
                        System.Console.WriteLine("Exception #{0}", e);
                        //  App.Close();
    
                    }
                });
            }
            private void InitExceptionHandle()
            {
                this.DispatcherUnhandledException += (o, args) =>
                {
                    args.Handled = true;
                    OnUnhandledException(args.Exception);
                };
                TaskScheduler.UnobservedTaskException += (o, args) =>
                {
                    OnUnhandledException(args.Exception);
                };
                AppDomain.CurrentDomain.UnhandledException += (o, args) =>
                {
                    if (args.ExceptionObject is Exception e)
                    {
                        OnUnhandledException(e);
                    }
                    else
                    {
                        System.Console.WriteLine("Exception #{0}", args.ExceptionObject);
                        
                    }
                };
            }
  • 相关阅读:
    【NOIP2013】花匠
    【DP合集】tree-knapsack
    【DP合集】m-knapsack
    【DP合集】背包 bound
    【DP合集】合并 union
    【DP合集】棋盘 chess
    BZOJ1026 [SCOI2009]windy数
    最长上升子序列 LIS nlogn
    再谈线性基
    数论问题算法模板
  • 原文地址:https://www.cnblogs.com/xfweb/p/15921038.html
Copyright © 2020-2023  润新知