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

本文关键字:单独 线程 异常 dll 外部 何处理 处理 | 更新日期: 2023-09-27 17:59:29

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

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

如果您将DLL加载到一个单独的应用程序域中,您应该能够隔离使用AppDomain.UnhandledException生成的异常,但是,请注意,这不是傻瓜式的,在某些情况下,它仍然会占用您的进程,并且您对此无能为力(堆栈溢出、内存不足等)。

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

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

这允许您在需要时终止/重新启动流程…

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

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

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