【问题标题】:Any way to catch exceptions from any spawned thread?有什么方法可以从任何生成的线程中捕获异常?
【发布时间】:2012-01-16 12:31:09
【问题描述】:

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

目前,我对插件的任何调用都有一个 try/catch 处理程序,以尝试保护我的应用免受第三方代码的影响。 catch 会记录问题,但不会使我的应用崩溃。

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

有没有办法从“由这个函数产生的任何东西”中捕获异常?还是我需要在我的全局处理程序中捕获它们?

【问题讨论】:

  • 什么类型的应用程序?表格? ASP.NET?服务? WPF?
  • WPF,但我认为这无关紧要。插件对 GUI 框架一无所知。
  • 捕获未处理异常的方法可能不同。

标签: c# multithreading exception


【解决方案1】:

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

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

您可能想查看托管可扩展性框架 (MEF)。这是专门为这些场景设计的。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 2012-02-22
      相关资源
      最近更新 更多