来自MSDN的引用:http://msdn.microsoft.com/en-us/library/6kac2kdh.aspx
一个或多个托管线程 (代表 System.Threading.Thread)可以运行 一个或任意数量的申请 同一个托管中的域名 处理。每个应用程序 域以单个启动 线程,该应用程序中的代码 域可以创建额外的 应用领域和其他 线程。 结果是一个托管 线程之间可以自由移动 应用程序域内部相同 管理流程;你可能只有 一个线程在几个之间移动 应用领域。
我尝试用两个共享一个线程的应用程序域编写代码。但我放弃了。我真的不知道这是怎么回事。你能给我一个代码示例吗?
答案 0 :(得分:8)
这可以通过在单独的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();
}
答案 1 :(得分:0)
在另一个应用程序域的对象上调用方法。
答案 2 :(得分:0)
这可能是因为英语不是我的第一语言,但文档对我来说有点混乱。
为了澄清您何时创建新的AppDomain,您不会获得其他线程。如果通过MarshalByRef
代理调用方法,则通过主线程完成,除非您自己创建其他线程。
即。创建其他AppDomain时的默认行为是,将在不同的AppDomain之间共享一个线程。