1

我正在加载一个在自身内部产生几个线程的 dll。程序时不时地因未处理的异常而崩溃。我无法将所有库调用包装在 try/catch 语句中,因为异常是在单独的线程上引发的,而且我无权访问库的源来调试/修复错误处理。我希望程序在这些异常发生时继续做其他事情,是否有一种优雅的方式来处理这些异常?还是我唯一能做的就是做一个全局捕获所有异常的方法?

4

2 回答 2

1

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

这使您可以在需要时终止/重新启动进程...

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

  • 您可以使用 COM(如果您将其实现为进程外 COM 服务器)
  • 您可以使用共享内存(非常高性能,请参阅this for a walkthrough和this for a .NET 2 wrapper)

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

于 2013-02-15T20:36:02.183 回答
1

如果您将 DLL 加载到单独的 appdomain 中,您应该能够隔离使用AppDomain.UnhandledException.可以解决它(堆栈溢出,内存不足等)。

在这种情况下,您可以做的最好的事情是使用某种 dll 通信工具将它们完全加载到一个单独的进程中,并使用某种形式的远程处理与该进程对话。

于 2013-02-15T20:29:08.153 回答