c# - 应用程序域和线程

标签 c# .net multithreading applicationdomain

引自 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.

我尝试用共享一个线程的 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 个 AppDomains 中有 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();
}

关于c# - 应用程序域和线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675089/

相关文章:

java - 为什么 Java 错误会被 ExecutorService 实例生成的线程吞噬?

c# - 比匿名类型的通用列表更好的方法

javascript - 尝试使用 IIS ssl 时获取 ERR_INSECURE_RESPONSE

c# - 如何从头开始创建一个快速的 WPF Datagrid 控件?

c# - 如何检查 SqlConnection 中使用的 SQL Server 端 SSL 证书?

.net - 有没有办法在参数替换后从 SqlCommand 获取完整的 sql 文本?

c# - 获取继承实体的导航属性

c# - 尽管我绘制了路线,但仍然收到 404

java - 等待来自 RegistrationIntentService 的 token 值

java - 不同Jvm之间的同步