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();

  • 相关阅读:
    获取和设置iframe中的元素
    css隔行换色样式修改
    在本地打开网页
    HTML-embed标签详解
    GlusterFS缺点分析[转]
    设计新Xlator扩展GlusterFS[转]
    C语言:全局变量在多个c文件中公用的方法 [转]
    const char*, char const*, char*const的区别
    C 语言字符数组的定义与初始化
    滑动窗口机制[转]
  • 原文地址:https://www.cnblogs.com/czly/p/11858644.html
Copyright © 2011-2022 走看看