防止第三方组件的exception崩溃整个应用程序
我正在编写一个依赖于某些第三方DLL的multithreading应用程序。 我的问题是,当使用第三方库中的对象时,如果它在运行时引发exception,我无法捕获它并且它会冒泡并杀死整个应用程序。 我有许多不同的线程,每个线程使用来自此第三方库的自己的对象,我需要使用该对象副本的线程能够捕获并处理exception。
根据我所读到的内容,似乎第三方库实际上是在制作自己的线程并允许未捕获的exception。 .NET 2.0+行为允许这些exception终止整个应用程序。 我知道AppDomain.CurrentDomain.UnhandledException,但这不允许您阻止应用程序关闭。
作为参考,我正在.NET 4.0中编写一个控制台应用程序。 有没有人有任何解决方案/建议来阻止这些exception杀死我的应用程序?
您可能会关注的一件事是HandleProcessCorruptedStateExceptionsAttribute
属性。
我不知道这是不是你的问题,但最近我不得不在一个调用第三方COM对象中的函数的方法上使用这个属性。 此属性是.net 4.0的新属性。 我的基本理解是4.0框架默认情况下不会冒出在某些情况下抛出的exception,在这种情况下,它感觉第三方exception可能引入了一些不稳定性。 我认为这主要适用于第三方组件未受管理的情况。 我不确定,但它解决了我的问题。
用法如下:
[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute()] private void ThirdPartyCall() { try { return Call3rdPartyFunction() } catch (Exception exInstantiate) { ... } }
更多信息: http : //msdn.microsoft.com/en-us/magazine/dd419661.aspx
问题可能是,一旦它们冒出线程proc,就不会捕获在后台线程上抛出的exception。
这似乎是一个非显而易见的重复如何防止后台线程中的exception终止应用程序?
您可以通过这样做来停止应用程序崩溃:
AppDomain.CurrentDomain.UnhandledException += (sender, e2) => { Thread.CurrentThread.Join(); };
但是,来自3d party组件的未被捕获的exception意味着组件无法正常工作。 如果你不在乎他们是否做得更好,就不要使用它们。
上述就是C#学习教程:防止第三方组件的exception崩溃整个应用程序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1022423.html