【问题标题】:How to run a method in a separate AppDomain?如何在单独的 AppDomain 中运行方法?
【发布时间】:2011-03-23 18:35:40
【问题描述】:

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

特别是我有以下问题:

  • 能否将程序集加载到 AppDomain A 中并在 AppDomain B 中执行其方法?
  • 看来我是通过AppDomain.DoCallBack Method 和CrossAppDomainDelegate 实现的。我只是无法弄清楚在不同的 AppDomain 中拥有程序集和方法有什么意义。是否将相同的程序集再次加载到另一个 AppDomain 中以执行该方法?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

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

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

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

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

    查看 AppDomain 类的“CreateInstance”系列方法。过去我曾多次使用CreateInstanceFromAndUnwrap() 处理这种情况。

    至于您关于有多少种方法可以做到这一点的问题......嗯,很多,但这在很大程度上取决于具体情况以及您手头有什么物品。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-24
        • 1970-01-01
        相关资源
        最近更新 更多