如何解决防止来自第三方的异常导致整个应用程序崩溃
|| 我正在编写依赖于某些第三方DLL的多线程应用程序。我的问题是,当使用第三方库中的对象时,如果它在运行时引发异常,我将无法捕获它,并且会冒出气泡并杀死整个应用程序。我有许多不同的线程,每个线程都使用该第三方库中的自己的对象,并且我需要使用该对象副本的线程才能捕获和处理异常。 根据我所读的内容,似乎第三方库很可能实际上正在创建自己的线程并允许未捕获的异常。 .NET 2.0+行为允许这些异常杀死整个应用程序。我知道AppDomain.CurrentDomain.UnhandledException,但这不允许您阻止应用程序关闭。 作为参考,我正在.NET 4.0中编写一个控制台应用程序。有没有人有任何解决方案/建议来阻止这些异常杀死我的应用程序?解决方法
您可能要看的一件事是“ 0”属性。
我不知道这是否是您的问题,但是最近我不得不在调用第三方COM对象中的函数的方法上使用此属性。此属性是.net 4.0的新增属性。我的基本理解是,默认情况下4.0框架不会冒泡在某些情况下抛出的异常,在某些情况下,它感觉到第三方异常可能会带来一些不稳定。我认为这主要与第三方组件不受管理的情况有关。我不确定,但是它解决了我的问题。
用法如下所示:
[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute()]
private void ThirdPartyCall()
{
try
{
return Call3rdPartyFunction()
}
catch (Exception exInstantiate)
{
...
}
}
详细信息:http://msdn.microsoft.com/zh-cn/magazine/dd419661.aspx
, 问题可能是一旦它们从线程proc中冒出,就不会捕获在后台线程上引发的异常。
这似乎是如何防止后台线程中的异常终止应用程序的一个显而易见的重复。
, 您可以通过以下方法停止应用程序崩溃:
AppDomain.CurrentDomain.UnhandledException += (sender,e2) =>
{
Thread.CurrentThread.Join();
};
但是3d派对组件未捕获的异常意味着组件不能正常工作。如果您不在乎他们是否做得更好,请不要使用它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。