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