首页 > 其他分享 >全局异常捕获

全局异常捕获

时间:2023-12-04 14:47:04浏览次数:27  
标签:捕获 sender void object private DispatcherUnhandledException 全局 异常 App

DispatcherUnhandledException——UI线程未被处理的异常捕获

从App对象中订阅DispatcherUnhandledException事件

    public partial class App : Application
    {
        public App()
        {
            // Dispatcher   UI线程    未被处理的异常
            this.DispatcherUnhandledException += App_DispatcherUnhandledException;
        }
        private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message);
        }
    }

 在按钮事件下触发未使用try-catch捕获的异常,会触发DispatcherUnhandledException事件

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //try
            //{
            int i = 0;
            var result = 100 / i;
            //}
            //catch (Exception ex)
            //{

            //}
        }

 AppDomain.CurrentDomain.UnhandledException——非UI线程未被处理的异常捕获

从AppDomain.CurrentDomain对象中订阅UnhandledException事件

    public partial class App : Application
    {
        public App()
        {
            // Dispatcher   UI线程    未被处理的异常
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        }
        private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // 记录下日志
        }
    }

 在按钮事件下触发Thread线程报错,异常会触发UnhandledException事件

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var thread = new Thread(new ThreadStart(() =>
            {
                int i = 0;
                var result = 100 / i;
            }));
            thread.Start();
            //thread.IsBackground = true;
        }

 TaskScheduler.UnobservedTaskException——未被观察到的Task异常捕获

 从TaskScheduler对象中订阅UnobservedTaskException事件

public partial class App : Application
    {
        public App()
        {
            TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
        }
        private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
        {
            
        }
    }

创建两个按钮事件

在按钮1事件下执行Task线程报错,异常会在Task块被GC回收时触发UnobservedTaskException事件

在按钮2事件下执行一次GC回收

private void Button_Click(object sender, RoutedEventArgs e)
        {
           var t= Task.Run(() =>
            {
                int i = 0;
                var result = 100 / i;
            });
        }
        private void Button_Click1(object sender, RoutedEventArgs e)
        {
            GC.Collect();
        }

标签:捕获,sender,void,object,private,DispatcherUnhandledException,全局,异常,App
From: https://www.cnblogs.com/ZHIZRL/p/17874848.html

相关文章

  • Java异常处理
    异常处理是Java编程中的一个核心概念,它提供了一种强大的方法来处理运行时错误,使我们的程序更加健壮。异常是程序运行过程中发生的不正常情况,它打断了正常的指令流。本文将介绍Java中的异常处理机制,包括异常的类型、如何捕获和处理异常,以及自定义异常。异常类型在Java中,所有的异常都......
  • java 捕获异常Exception 获取异常信息的方法 e.toString() e.getMessage() e.printSta
    Java异常中e.getMessage()和e.toString()e.printStackTrace()的区别e.getMessage():打印异常的原因e.toString():打印异常类型和异常的原因e.printStackTrace():打印完整的异常堆栈信息  总结e.getMessage()和e.toString()方法:打印的异常信息太少,没有具体......
  • R语言Outliers异常值检测方法比较|附代码数据
    原文链接:http://tecdat.cn/?p=8502原文出处:拓端数据部落公众号最近我们被客户要求撰写关于异常值检测的研究报告,包括一些图形和统计输出。识别异常值的方法有很多种,R中有很多不同的方法。 关于异常值方法的文章结合了理论和实践。理论一切都很好,但异常值是异常值,因为它们不遵......
  • SpringBoot 统一异常处理
    1.在SpringBoot中项目中常见的统一异常处理方式是:使用@RestControllerAdvice和@ExceptionHandler注解。项目中的所有类型异常都会被抛到统一异常处理类中统一处理。预期效果如下:2.新建一个异常类ParamValidException,继承RuntimeException.@DatapublicclassParamValidExcepti......
  • influxdb: unable to parse points 异常解决总结
    转载请注明出处:influxdb使用过程经常遇到:unabletoparsepoints 的异常:    unabletoparsepoints是InfluxDB抛出的异常,表示无法解析数据点(points)。这个错误通常与数据格式不匹配或数据字段类型错误有关。可能导致"unabletoparsepoints"错误的原因:1.......
  • java.net.ConnectException: Connection timed out: connectjava.net.连接异常:连接超
    因为我有steam++加速器,但这个加速器会清空你的hosts文件,往常出现java.net.ConnectException:Connectiontimedout:connectjava.net.连接异常:连接超时:连接这个问题的时候一般都是hosts文件被清空了。但昨天写作业的时候发现在hosts文件写上ip以后还会报错。这个问题我解决了......
  • 无涯教程-Erlang - 异常处理
    任何编程语言都需要异常处理来处理运行时错误,以便可以维护应用程序的正常流程。通常,当Erlang中发生异常或错误时,将显示以下消息。{"initterminatingindo_boot",{undef,[{helloLearnfk,start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}故障转储将被写入-erl_......
  • Vim 全局配置
    新搞的Linux(Debian)上的vim一右击粘贴就变成insert(Visual)模式,上网查了一下,要setmouse=,但是每次设置太麻烦了,另外我也想改一下全局配色。定位全局配置文件看到有篇博客说是在/usr/share/vim/share/...下有个vimrc,可能不同系统或版本有差异,总的来说先去/usr/shar......
  • django-apschedule定时任务异常停止
    背景在django项目中使用django-apschedule来实现定时任务,使用的是BackgroundScheduler调度类,该调度的实现是通过后台线程的方式执行定时任务。其中任务都是持久化到数据库中的。在项目的运行过程中,因为数据库的异常,导致定时任务线程异常终止,即使数据库后续恢复正常,但也不再继续执行......
  • 【JavaSE】异常(异常体系、异常处理方式、自定义异常)
    异常介绍异常体系一定要能阐述异常的体系结构!异常类的祖先类:Throwable所有的异常都是一个类,如果不清楚可以在API帮助文档查询运行时异常:编译时没有错误,运行时可能会出错,通常是代码不严谨导致的编译时异常(不包含语法错误):主要起提醒作用,需要在运行之前给出解决方式异常处理......