C# · 12月 31, 2021

c# – 防止第三方组件的异常崩溃整个应用程序

我正在编写一个依赖于第三方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) { … }}

更多信息:http://msdn.microsoft.com/en-us/magazine/dd419661.aspx