应用程序域和线程

Mic*_*ndl 2 .net c# multithreading applicationdomain

来自MSDN的引用:http://msdn.microsoft.com/en-us/library/6kac2kdh.aspx

一个或多个托管线程(由System.Threading.Thread表示)可以在同一个托管进程中的一个或任意数量的应用程序域中运行.尽管每个应用程序域都是使用单个线程启动的,但该应用程序域中的代码可以创建其他应用程序域和其他线程.结果是托管线程可以在同一个托管进程内的应用程序域之间自由移动 ; 您可能只有一个线程在多个应用程序域之间移动.

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

Jar*_*Par 8

这可以通过在单独的AppDomain中创建一个MarshalByRef对象然后在该对象上调用方法来完成.

以下面的类定义为例.

public interface IFoo
{
    void SomeMethod();
}

public class Foo : MarshalByRefObject, IFoo
{
    public Foo()
    {
    }

    public void SomeMethod()
    {
        Console.WriteLine("In Other AppDomain");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此定义从当前的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();
}
Run Code Online (Sandbox Code Playgroud)