应用程序域为安全性、版本控制、可靠性和托管代码的卸载形成隔离边界。 线程是公共语言运行时用来执行代码的操作系统构造。 在运行时,所有托管代码均加载到一个应用程序域中,由托管线程来运行。
应用程序域和线程之间不具有一对一的相关性。 在任意给定时间,在单个应用程序域中可以执行几个线程,而且特定线程并不局限在单个应用程序域内。 也就是说,线程可以自由跨越应用程序域边界;不为每个应用程序域创建新线程。
在任意给定时间,每一线程都在一个应用程序域中执行。 在任何给定的应用程序域内可能有零个、一个或多个线程正在执行。 运行时会跟踪在哪些应用程序域中有哪些线程正在运行。 通过调用 GetDomain 方法,您可以随时确定线程执行所在的域。
应用程序域和区域性
可以向线程附加 CultureInfo 对象。 但是,为了防止恶意代码进入其他应用程序域,CultureInfo 对象在其线程跨越应用程序域边界时自动被设置为只读。
如果对 CultureInfo 对象进行了自定义(例如使用自定义 Calendar),则会在线程尝试跨越应用程序域边界时引发 InvalidOperationException。