2011-11-28 35 views
0

在应用程序域中创建的线程可以移动到其他应用程序域。由于每个应用程序域是相互隔离的,应用程序域之间的线程访问

  1. 如何一次可以访问应用程序域创建的线程在 其他应用程序域?
  2. 这个的任何示例
  3. CLR如何跟踪这个并处理线程的移动?

回答

0

如果您指的是Thread对象,则无法序列化它,但不能跨AppDomain边界“移动”。但是,您可以通过远程处理与不同AppDomain中的对象进行交互。

+0

根据msdn http://msdn.microsoft.com/en-us/library/a60kkx8k.aspx。 :应用程序域和线程之间不存在一对一的关联。几个线程可以在任何给定时间在单个应用程序域中执行,并且特定线程不限于单个应用程序域。也就是说,线程可以自由跨越应用程序域边界;不会为每个应用程序域创建新线程 – Raghav55

+0

@ Raghav55:'Thread'对象(例如,['System.Threading.Thread'](http://msdn.microsoft.com/zh-cn/library/system。 threading.thread.aspx))和线程不是一回事。 – LukeH

+0

@LukeH:这将是一个很好的例子。 – Raghav55

0

根据msdn msdn.microsoft.com/en-us/library/a60kkx8k.aspx。 : 应用程序域和线程之间不存在一对一的关联。几个线程可以在任何给定时间在单个应用程序域中执行,并且特定线程不局限于单个应用程序域中的 。也就是说,线程可以自由穿越 应用程序域边界;是不是每个 应用领域

创建一个新的线程从同一篇文章:

“在任何给定的时间,每个线程在应用程序 零域,一个或多个执行在给定应用程序域的任何 中,一个线程可能正在执行,运行时会跟踪哪些线程在哪个应用程序域中运行,您可以随时通过调用GetDomain方法来定位线程正在执行的域 方法 “。

重要的一点是在任何时候给定的线程只能局限于一个AppDomain。这很重要,如果线程中止或抛出未处理的异常,那么它将只包含将受影响的AppDomain。线程之间可以共享的是从MarshalByRefObject或MarshalByValueObject类派生的数据(即对象)。

相关问题