• WPF 线程中异常导致程序崩溃


    一般我们WPF中都加全局捕获,避免出现异常导致崩溃。

    Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;

    但是,一些比较耗时的操作,我们放到线程中,如果抛出了异常

       System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback((p) =>
                {
                    System.Threading.Thread.Sleep(1000);
                    throw new Exception("bbb");
                }));

     CurrentDomain.UnhandledException会捕获到,但是这种捕获方式显示错误后,还是会导致程序崩溃。

    后来研究了下,想想换个线程方式。

         private async void Run()
            {
                await Task.Run(() =>
                {
                    Thread.Sleep(1000);
                    throw new Exception("bbb");
                });
               
            }

    这种方式抛出异常后,会被DispatcherUnhandledException捕获到,这种异常可以e.Handled=true,不会崩溃。

     .net framework 4.0中没有Task.Run怎么办,可以用Task.Factory.StartNew();

  • 相关阅读:
    win10系统激活 快捷方式
    echarts 图表自适应外部盒子大小
    JS开发常用工具函数 总结
    课程学习总结报告
    结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程
    基于mykernel 2.0编写一个操作系统内核
    框架复习_SpringMvc
    框架复习_Mybatis
    框架复习_Spring
    IDEA调试
  • 原文地址:https://www.cnblogs.com/czly/p/11858644.html
Copyright © 2020-2023  润新知