这可以通过简单地在单独的 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();
}