应用程序域和线程

应用程序域和线程

本文介绍了应用程序域和线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从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();
}

这篇关于应用程序域和线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 01:00