.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/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。