防止第三方组件的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#从列表框拖放到树视图
- 我可以在同一个项目中引用两个版本的dll而不将它们放在GAC中吗?
- SqlConnection如何管理IsolationLevel?
- Visual Studio / MSBuild将引用类库的app.config复制为* .dll.config到当前项目的bin文件夹
- WCF从客户端向服务器发送int
- Automapper项目使用
- .NET ShellExtension(Framework 4.5,Windows 8.1,SharpShell)无效
- File.Delete在之前调用Image.FromFile时失败,尽管复制了加载的图像并破坏了原始图像
- CA1009:正确声明事件处理程序?