2011-10-22 46 views
7

可能是以下副本:Can I prevent an uncaught exception in another AppDomain from shutting down the application?当我加载的另一个AppDomain抛出一个未处理的异常时,我可以将我当前的AppDomain从拆除状态中分离出来吗?

一直试图找出这个问题的答案。

只是想确保答案确实不是,在我扔掉所有代码之前,我已经将他们的驱动程序隔离在其单独的应用程序域中,并将其替换为旧式过程。

所以正式的问题是这样的。

有一个默认域“ad-default”,我在其中创建了一个新的“ad-hosted”应用程序域,可以避免“广告托管”中的未处理的例外“ad-default”?

我知道我可以通过连接到“ad-hosted”域的UnhandledException事件来观察异常,但我无法阻止它们传播到“ad-default”域。

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

编辑: 答案不幸的是没有,看到这个答案的解释: AppDomain, handling the exceptions

+1

不重复。 –

回答

3

隔离在从拆除默认域另一个应用程序域线程的例外,唯一的方法是使用:

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

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

我们在我们的例子中做的是在两个域中连接到UnhandledExceptionHandler。 然后,我们在“广告托管”中触发一个semafore,该广告将通过为此目的在“广告默认”中创建的线索提取,然后转而处理“广告托管”

这是一个黑客,并可能无法存活到框架的未来几代,但它使“广告默认”更强大,因为它不会被拆除在“广告托管”的未处理的例外,我们还钩在“ad-default”中添加事件处理程序,将发件人转换为appdomain,并检查是否发生了“ad-default”异常,如果是,我们也会拆除“ad-default”,模拟.net 2.0的行为,甚至使用上面描述的运行时设置。

希望这给了人们一个关于如何制作更多静音插件主机的线索。

相关问题