当我加载的另一个AppDomain抛出未处理的异常时,我可以隔离当前的AppDomain吗?

时间:2011-10-22 17:33:09

标签: c# .net appdomain

可能是Can I prevent an uncaught exception in another AppDomain from shutting down the application?

的副本

一直在努力找出这个问题的答案。

只是想确保答案确实没有,然后我扔掉了我在隔离的appdomains中隔离我的驱动程序所做的所有代码,并将其替换为旧式流程。

所以正式的问题是这个。

有一个默认域名“ad-default”,我在其中创建了一个新的appdomain“ad-hosted”,我可以避免“广告托管”中未处理的例外情况,这是“ad-default”吗?

我知道我可以通过连接到“广告托管”域的UnhandledException事件来观察异常,但我找不到阻止它们传播到“ad-default”域的方法。

这是真的吗?但是,如果他们不提供隔离,为什么我们甚至会想要AppDomain呢?

编辑: 遗憾的是,答案是否定的,请参阅此答案进行解释: AppDomain, handling the exceptions

1 个答案:

答案 0 :(得分:3)

将另一个应用程序域中的线程中的异常与拆除默认域隔离的唯一方法是使用:

 <runtime>
    <legacyUnhandledExceptionPolicy enabled="1"/>
 <runtime>

将unhandledexception的IsTerminating标志设置为false,并阻止默认域关闭。

我们在我们的案例中所做的是连接两个域中的UnhandledExceptionHandler。 然后,我们会在“广告托管”中触发一个semafore in,该广告将由“ad-default”中为此目的创建的线程获取,然后依次处理“广告托管”

这是一个黑客,可能无法生存到框架的后代,但它使“广告默认”更加强大,因为它不会被拆除“广告托管”中未处理的例外

我们还在“广告默认”中添加了一个eventhandler,它会将发件人转换为appdomain,并检查该异常是否来自“ad-default”,如果是这样,我们也会删除“ad-default”,模仿行为.net 2.0,即使使用上述运行时设置。

希望这能让人们了解如何制作更加安静的插件主机。