有没有办法从任何衍生线程中捕获异常?

时间:2012-01-16 12:31:09

标签: c# multithreading exception

我正在开发一个支持插件的应用。插件可能由第三方开发。

目前我有一个try / catch处理程序围绕任何调用插件来尝试保护我的应用程序免受第三方代码的攻击。 catch会记录问题,但不会导致我的应用程序崩溃。

我的问题是第三方代码产生线程做一些工作。这些都没有被我的处理程序捕获。

有没有办法从“由此函数生成的任何东西”中捕获异常?或者我是否需要在我的全局处理程序中捕获它们?

2 个答案:

答案 0 :(得分:3)

当插件失败并在同一AppDomain中运行时,最好让应用程序自行失败;因此,停止申请。当插件崩溃时,您不会知道应用程序处于什么状态。

另一个选择是在自己的(子)AppDomain中运行一个插件。这样,您可以卸载该app域并在新创建的AppDomain中重新启动该插件,而无需重新启动应用程序。

您可能希望了解托管扩展性框架(MEF)。这是专为这些场景设计的。

答案 1 :(得分:2)

关于您的第二个愿望 - 在全局处理程序中捕获异常,您可以在应用程序域中包含UnhandledException事件。它将捕获代码中未捕获的所有异常。

主要用于记录异常的信息。但是,它不会使您的应用程序无法终止。