0

我最近开始研究线程。我想从头开始,开始阅读 MSDN 文档。阅读 ApplicationDomain,每个应用程序都是独立的。但是在此链接ApplicationDomain and Threads中提到

多个线程可以在任何给定时间在单个应用程序域中执行,并且特定线程不限于单个应用程序域。也就是说,线程可以自由地跨越应用程序域边界

如果一个用户创建了一个线程并且允许它跨应用程序域,那么它可以引用另一个应用程序域的对象或内存引用吗???如果我错了,请指导我。

4

3 回答 3

1

答案是肯定的。每个线程都有一个可以指向任意对象的堆栈。线程堆栈上的局部变量是 GC 根,这意味着只要线程处于活动状态,它们就会保持一切活动。

于 2012-03-31T19:15:08.430 回答
0

一个线程运行代码,它不能引用一个应用程序的特定类型或对象。

线程的大多数属性都是只读的,您将非常具体的属性(如CurrentCultre)不能用于传递自定义类型。

将数据与特定线程关联的唯一方法是使用线程 本地存储 ,它当然不会从应用程序域传递到另一个,并且仅在非常特定的情况下有用。

于 2012-03-31T19:12:19.863 回答
0

应用程序域和线程之间没有一对一的关系。尽管线程可能跨越应用程序域边界,但在任何时候,线程都在单个应用程序域中执行。

请参阅 MSDN (http://msdn.microsoft.com/en-us/library/2bh4z9hs%28v=vs.90%29.aspx) 的以下信息:

在一个应用程序中运行的代码不能直接访问另一个应用程序的代码或资源。公共语言运行时通过防止不同应用程序域中的对象之间的直接调用来强制实施这种隔离。在域之间传递的对象要么被复制,要么被代理访问。如果对象被复制,则对该对象的调用是本地的。也就是说,调用者和被引用的对象都在同一个应用程序域中。如果通过代理访问对象,则对对象的调用是远程的。在这种情况下,调用者和被引用的对象位于不同的应用程序域中。跨域调用使用与两个进程之间或两台机器之间的调用相同的远程调用基础结构。

以下文章也可能有用: http: //www.codeproject.com/Articles/26148/Beginners-Guide-to-Threading-in-NET-Part-1-of-n

于 2012-04-06T15:56:53.067 回答