代码之家  ›  专栏  ›  技术社区  ›  Michael Piendl

应用程序域和线程

  •  2
  • Michael Piendl  · 技术社区  · 17 年前

    MSDN的一句话: http://msdn.microsoft.com/en-us/library/6kac2kdh.aspx

    一个或多个托管线程 一个或任意数量的应用程序 过程虽然每个应用程序 线程,该应用程序中的代码 应用程序域和其他 线程。 线可以在两个方向之间自由移动 同一应用程序中的应用程序域 ; 你可能只有 一根线在几根线之间移动 应用程序域。

    我试图用共享一个线程的两个应用程序域编写代码。但我放弃了。我真的不知道这怎么可能。你能给我一个代码示例吗?

    3 回复  |  直到 17 年前
        1
  •  8
  •   Mitch Wheat    17 年前

    这可以通过在单独的AppDomain中创建一个MarshalByRef对象,然后调用该对象上的方法来实现。

    以下面的类定义为例。

    public interface IFoo
    {
        void SomeMethod();
    }
    
    public class Foo : MarshalByRefObject, IFoo
    {
        public Foo()
        {
        }
    
        public void SomeMethod()
        {
            Console.WriteLine("In Other AppDomain");
        }
    }
    

    然后,您可以使用此定义调用当前AppDomain之外的单独AppDomain。在调用写入控制台时,您将在2个AppDomain中拥有1个线程(在调用堆栈中的2个不同点)。下面是这方面的示例代码。

    public static void CallIntoOtherAppDomain()
    {
        var domain = AppDomain.CreateDomain("Other Domain");
        var obj = domain.CreateInstanceAndUnwrap(typeof(Foo).Assembly.FullName, typeof(Foo).FullName);
        var foo = (IFoo)obj;
        foo.SomeMethod();
    }
    
        2
  •  0
  •   Lars Truijens    17 年前

        3
  •  0
  •   Brian Rasmussen    17 年前

    这可能是因为英语不是我的第一语言,但文档对我来说有点混乱。

    只是澄清一下,当您创建新的AppDomain时,您不会得到额外的线程。如果您通过 MarshalByRef

    即,创建其他AppDomain时的默认行为是在不同AppDomain之间共享一个线程。

    推荐文章