我认为,当前区域信息(CurrentCulture和/或CurrentUICulture)是运行线程的属性,这似乎是一种奇怪的设计选择。至少,在这种情况下,这样的东西的范围应该在进程级别上。
但是,当你了解到.NET设计师为什么决定将此属性放在Thread上时,这些事情通常都有意义。这可能会让人们恍然大悟。
我认为,当前区域信息(CurrentCulture和/或CurrentUICulture)是运行线程的属性,这似乎是一种奇怪的设计选择。至少,在这种情况下,这样的东西的范围应该在进程级别上。
但是,当你了解到.NET设计师为什么决定将此属性放在Thread上时,这些事情通常都有意义。这可能会让人们恍然大悟。
编辑2: 目前在.NET 4.6中,文化流程如第4段所描述。这应该消除所有的顾虑。
我来试一试 - 或许是因为需要使用不同文化的多个并发线程?如果你想要一个多语言的ASP.NET网站,你不希望进程被绑定在一个语言上...一个Web请求可能是EN-US,另一个可能是fr-FR。
窗口句柄本身是线程特定的。您不应该在不同线程的上下文中使用窗口句柄(针对顶级窗口、子控件等),因为实现窗口处理的代码(GDI)本身不是线程安全的。由于UICulture是窗口特定的,这意味着它也变成了线程级别的。
其他GUI方面也是线程特定的,例如活动窗口和焦点。虽然有一个API(我记不起名字了),可以将来自不同线程的UI上下文连接在一起,以便多个用户界面线程共享焦点和活动窗口。