引用MSDN的一段话:http://msdn.microsoft.com/en-us/library/6kac2kdh.aspx http://msdn.microsoft.com/en-us/library/6kac2kdh.aspx
一个或多个托管线程
(代表为
System.Threading.Thread)可以运行在
一份或任意数量的申请
同一管理域内
过程。虽然每个申请
域以单个开始
线程,该应用程序中的代码
域可以创建额外的
应用领域和附加
线程。结果是,一个托管的
线之间可以自由移动
同一应用程序域内
受管理的过程;你可能只有
一根线在多根线之间移动
应用领域。
我尝试编写具有共享一个线程的 2 个应用程序域的代码。但我放弃了。我真的不知道这怎么可能。你能给我一个代码示例吗?
这可以通过简单地在单独的 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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)