zoukankan      html  css  js  c++  java
  • 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();

  • 相关阅读:
    C语言学习笔记:14_内部函数和外部函数
    HDU 1247 Hat’s Words (字典树 && map)
    混合云技术难题
    psql
    postgresql基本语句
    postgresql C/C++ API 接口
    REST API初识及设计
    postGreSQL数据库部署及简单使用
    IO-APIC
    OpenstackHigh-level-service
  • 原文地址:https://www.cnblogs.com/czly/p/11858644.html
Copyright © 2011-2022 走看看