.NET处理异常比较简单,一般有三种方式全局处理异常。

    AppDomain.CurrentDomain.UnhandledException += ExceptionProxy.CurrentDomainOnUnhandledException;
    Current.DispatcherUnhandledException += ExceptionProxy.DispatcherOnUnhandledException;
    TaskScheduler.UnobservedTaskException += ExceptionProxy.TaskSchedulerOnUnobservedTaskException;

DispatcherOnUnhandledException的异常处理比较简单,只需要设置dispatcherUnhandledExceptionEventArgs.Handled = true;即可。

CurrentDomainOnUnhandledException的异常相对就麻烦一些,需要在配置文件中进行配置。

在启动进程的 app.config 配置文件中,添加以下配置项即可。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <runtime>
    <!--禁用执行FIPS政策,防止MD5加密算法抛异常-->
    <!--<enforceFIPSPolicy enabled="false" />-->
    
    <!--忽略未处理的异常,此时运行时不会退出-->
    <legacyUnhandledExceptionPolicy enabled="1" />
  </runtime>
</configuration>

加了上述配置后,unhandledExceptionEventArgs.IsTerminating就会变成false了。

DispatcherOnUnhandledException 是表示UI相关的异常。CurrentDomainOnUnhandledException通常表示非UI的异常。UnobservedTaskException一般不用处理,Task会把异常吞掉。

欢迎转载分享,请关注微信公众号,将同步更新博客,方便查看!

承哥技术交流小作坊


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/WPF-%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E5%85%A8%E5%B1%80%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系