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

DrS*_*ock 11 .net c# console multithreading exception-handling

我正在编写一个依赖于某些第三方DLL的多线程应用程序.我的问题是,当使用来自第三方库的对象时,如果它在运行时引发异常,我无法捕获它并且它会冒泡并杀死整个应用程序.我有许多不同的线程,每个线程使用来自此第三方库的自己的对象,我需要使用该对象副本的线程能够捕获并处理异常.

基于我所读到的内容,似乎第三方库实际上是在制作自己的线程并允许未捕获的异常..NET 2.0+行为允许这些异常终止整个应用程序.我知道AppDomain.CurrentDomain.UnhandledException,但是这不允许您阻止应用程序关闭.

作为参考,我正在.NET 4.0中编写一个控制台应用程序.有没有人有任何解决方案/建议来阻止这些异常杀死我的应用程序?

Jer*_*emy 8

你可能会关注的一件事是HandleProcessCorruptedStateExceptionsAttribute属性.

我不知道这是不是你的问题,但最近我不得不在一个调用第三方COM对象中的函数的方法上使用这个属性.此属性是.net 4.0的新属性.我的基本理解是4.0框架默认情况下不会冒出在某些情况下抛出的异常,在这种情况下,它感觉第三方异常可能引入了一些不稳定性.我认为这主要适用于第三方组件未受管理的情况.我不确定,但它解决了我的问题.

用法如下:

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute()]
private void ThirdPartyCall()
{
    try
    {
            return Call3rdPartyFunction()
    }
    catch (Exception exInstantiate)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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


hem*_*emp 5

问题可能是,一旦它们冒出线程proc,就不会捕获在后台线程上抛出的异常.

这似乎是一个非显而易见的重复如何防止后台线程中的异常终止应用程序?