我正在编写一个依赖于第三方DLL的多线程应用程序.我的问题是,当使用第三方库中的对象时,如果在运行时引发异常,我无法抓住它,并且它会起泡并杀死整个应用程序.我有许多不同的线程,每个使用自己的对象从这个第三方库,我需要使用该对象的副本能够捕获和处理异常的线程.
根据我读过的内容,似乎很可能第三方库实际上是在自己的线程中,并允许未被捕获的异常. .NET 2.0行为允许这些异常终止整个应用程序.我知道AppDomain.CurrentDomain.UnhandledException,但这不允许您防止应用程序关闭.
作为参考,我正在.NET 4.0中编写一个控制台应用程序.有没有人有任何解决方案/建议来阻止这些例外来杀死我的应用程序?
解决方法
您可能会看到的是
HandleProcessCorruptedStateExceptionsAttribute
属性.
我不知道这是否是你的问题,但是我最近不得不在一个在第三方COM对象中调用一个函数的方法使用这个属性.这个属性是.net 4.0的新特性.我的基本理解是,4.0框架默认情况下不会引发异常,在某些情况下,感觉第三方异常可能会引入一些不稳定性.我认为这主要涉及第三方组件不受管理的情况.我不确定,但它解决了我的问题.
使用情况如下所示:
[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute()] private void ThirdPartyCall() { try { return Call3rdPartyFunction() } catch (Exception exInstantiate) { ... } }