如何处理外部DLL中单独线程上的异常?

时间:2013-02-15 20:17:08

标签: c#

我正在加载一个dll,它会在自己内部产生一些线程。程序偶尔崩溃时会出现未处理的异常。我无法将所有库调用包装在try / catch语句中,因为异常被抛出在不同的线程上,并且我无法访问库的源来调试/修复错误的错误处理。我希望程序在发生这些异常时继续做其他事情,是否有一种优雅的方式来处理这些异常?或者我唯一能做的就是全局捕获所有异常方法?

2 个答案:

答案 0 :(得分:1)

如果您将DLL加载到单独的应用程序域中,您应该能够隔离使用AppDomain.UnhandledException生成的异常,但是,请注意这不是万无一失的,并且在某些情况下它仍然会占用您的处理过程也没有什么可以做的(堆栈溢出,内存不足等)。

在这种情况下,您可以做的最好的事情就是使用某种dll通信工具完全加载它们,并使用某种形式的远程处理来与该进程通信。

答案 1 :(得分:1)

我建议实现一个单独的进程(EXE),您的应用程序将启动该进程,然后加载DLL。

这允许您在需要时终止/重启过程...

我看到了几个如何沟通的选项 - 例如:

  • 您可以使用COM(如果将其实现为进程外COM服务器)
  • 您可以使用共享内存(性能非常高,请参阅this进行演练,this进行.NET 2包装)

如果该方法必须与多个Windows版本兼容,那么我将不使用任何“网络”用于IPC(因为一些带有桌面防火墙)。