如何在单独的AppDomain中运行方法?

时间:2010-08-01 03:05:35

标签: c# .net

在我的场景中,我想在单独的AppDomain中执行一个方法。 我可以采用多少种不同的方式来实现这一目标?

特别是,我有以下问题:

  • 我可以将程序集加载到AppDomain A并在AppDomain B中执行其方法吗?
  • 我似乎是通过AppDomain.DoCallBack MethodCrossAppDomainDelegate来实现这一目标的。我无法弄清楚如何在不同的AppDomain中使用程序集和方法是有意义的。是否同样可以再次加载到其他AppDomain中以执行该方法?

2 个答案:

答案 0 :(得分:7)

为了在单独的AppDomain中执行代码,必须将包含该代码的程序集加载到该AppDomain中。从那里,您可以使用反射或AppDomain类上的“CreateInstance”方法从您的托管域中调用第二个AppDomain中的方法。

请记住,AppDomains是硬边界。为了跨AppDomain边界进行通信,您需要使用远程处理或真正的IPC-ish机制。

这有点过时了,但我相信它仍然适用。 http://blogs.msdn.com/b/suzcook/archive/2003/06/12/57169.aspx

Suzanne Cook有一系列与此主题相关的帖子,因此可能值得浏览一下她的档案。

在AppDomain类上查看“CreateInstance”系列方法。在过去,我在这种情况下使用了CreateInstanceFromAndUnwrap()

至于你关于有多少种方法可以做到这一点的问题...嗯,很多,但这在很大程度上取决于具体情况以及你掌握的对象。

答案 1 :(得分:3)

添加Rob的正确答案,我想提一下,任何不使用反射调用的尝试都会导致程序集被加载到您调用的AppDomain中,这可能就是您要避免的。