Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理外部dll中独立线程上的异常?_C# - Fatal编程技术网

C# 如何处理外部dll中独立线程上的异常?

C# 如何处理外部dll中独立线程上的异常?,c#,C#,我正在加载一个dll,它会在自己内部生成几个线程。程序偶尔会因未处理的异常而崩溃。我无法将所有库调用包装在try/catch语句中,因为异常是在不同的线程上引发的,并且我没有访问库的源代码来调试/修复错误处理。我希望程序在这些异常发生时继续执行其他操作,有没有一种优雅的方法来处理这些异常?或者是我唯一能做的全局捕获所有异常的方法吗?如果将DLL加载到单独的appdomain中,您应该能够隔离使用appdomain生成的异常。未处理的异常,但是,请注意,这不是万无一失的,在某些情况下,它仍然会使您

我正在加载一个dll,它会在自己内部生成几个线程。程序偶尔会因未处理的异常而崩溃。我无法将所有库调用包装在try/catch语句中,因为异常是在不同的线程上引发的,并且我没有访问库的源代码来调试/修复错误处理。我希望程序在这些异常发生时继续执行其他操作,有没有一种优雅的方法来处理这些异常?或者是我唯一能做的全局捕获所有异常的方法吗?

如果将DLL加载到单独的appdomain中,您应该能够隔离使用
appdomain生成的异常。未处理的异常
,但是,请注意,这不是万无一失的,在某些情况下,它仍然会使您的进程退出,并且对此您无能为力(堆栈溢出、内存不足等)


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

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

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

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

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

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

如果这是可能的,如果在单独的线程中出现未处理的异常,w3wp.exe将不会崩溃。已经和我的主机提供商发生过几次了。。。