问题描述
从MSDN报价: http://msdn.microsoft.com/en -us /库/ 6kac2kdh.aspx
一个或多个托管线程 (再由psented $ P $ System.Threading.Thread)可以运行 的一个或任意数量的应用程序的 在相同的域管理 处理。虽然每个应用程序 域开始与单个 螺纹,美元的该应用程序C $ C 域可以创建更多 应用领域及附加 线程。 的结果是一个管理 线程之间自由流动 内相同的应用领域 管理过程中;你可能只有 一个线程在几个移动 应用程序域。
我试着写code与共享一个线程2的应用领域。但我放弃了。我真的不知道这是怎么可能的。你能给我一个code样品呢?
I tried to write code with 2 application domains that share one thread. But i gave up. I have really no idea how this is possible. Could you give me a code sample for this?
推荐答案
这可以通过简单地创建一个对象,它是MarshalByRef在一个单独的AppDomain中,然后调用该对象的方法进行。
This can be done by simply creating an object which is MarshalByRef in a separate AppDomain and then calling a method on that object.
就拿下面的类定义。
public interface IFoo
{
void SomeMethod();
}
public class Foo : MarshalByRefObject, IFoo
{
public Foo()
{
}
public void SomeMethod()
{
Console.WriteLine("In Other AppDomain");
}
}
您可以使用这个定义来调入从当前一个单独的AppDomain中。在呼叫写入控制台的地步,你将有1线程2应用程序域(在调用堆栈2个不同的点)。下面是示例code为。
You can then use this definition to call into a separate AppDomain from the current one. At the point the call writes to the Console you will have 1 thread in 2 AppDomains (at 2 different points in the call stack). Here is the sample code for that.
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();
}
这篇关于应用程序域和线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!