应用程序域和线程

发布于 2024-07-16 03:10:05 字数 572 浏览 7 评论 0原文

来自 MSDN 的引用: http://msdn.microsoft.com/en-us /library/6kac2kdh.aspx

一个或多个托管线程 (代表为 System.Threading.Thread)可以运行在 一份或任意数量的申请 同一管理域内 过程。 虽然每个申请 域以单个开始 线程,该应用程序中的代码 域可以创建额外的 应用领域和附加 线程。 结果是,管理 线可以在之间自由移动 同一应用程序域内 托管流程; 你可能只有 一根线在多根线之间移动 应用领域。

我尝试编写具有共享一个线程的 2 个应用程序域的代码。 但我放弃了。 我真的不知道这怎么可能。 你能给我一个代码示例吗?

A quote from MSDN: http://msdn.microsoft.com/en-us/library/6kac2kdh.aspx

One or more managed threads
(represented by
System.Threading.Thread) can run in
one or any number of application
domains within the same managed
process. Although each application
domain is started with a single
thread, code in that application
domain can create additional
application domains and additional
threads. The result is that a managed
thread can move freely between
application domains inside the same
managed process
; you might have only
one thread moving among several
application domains.

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

魂归处 2024-07-23 03:10:05

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

This can be done by simply creating an object which is MarshalByRef in a separate AppDomain and then calling a method on that object.

Take for example the following class definition.

public interface IFoo
{
    void SomeMethod();
}

public class Foo : MarshalByRefObject, IFoo
{
    public Foo()
    {
    }

    public void SomeMethod()
    {
        Console.WriteLine("In Other AppDomain");
    }
}

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();
}
傻比既视感 2024-07-23 03:10:05

调用另一个应用程序域的对象上的方法。

Call a method on an object of the other app domain.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文