本文共 2106 字,大约阅读时间需要 7 分钟。
Thread.CurrentCulture 影响 数字、符号、货币、日期等的格式化形式
Thread.CurrentUICulture 影响线程ResourceManager使用的资源类型
CultureInfo.UseUserOverride属性指示是否使用用户在控制面板自定义的 数字、符号、日期、货币等的格式,可以通过CultureInfo构造函数设置
新开一个新线程,默认的CurrentCulture为系统的Culture,如果要改变当前线程的Culture,需要在线程中修改 Thread.CurrentCulture值来实现,但是如果很多个线程都要一个个去改,那就呵呵了,还有那些可能不受我们控制的线程,如何去设置他们的Culture?
如果使用的.net环境是4.5及以上版本,CultureInfo提供了两个静态属性DefaultThreadCulture和DefaultThreadUICulture,一处修改即可实现所有的未显式设置Thread.CurrentCulture的线程都使用这个Default值。
如果是小于4.5的.net,可以通过反射来实现,因为CultureInfo类有两个私有的静态字段(在4.0中是s_userDefaultCulture,s_userDefaultUICulture;在更低的版本中是m_userDefaultCulture,m_userDefaultUICulture)
示例代码:
static void SetDefaultCulture(CultureInfo culture) { Type type = typeof(CultureInfo); try { type.InvokeMember("s_userDefaultCulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); type.InvokeMember("s_userDefaultUICulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); } catch { } try { type.InvokeMember("m_userDefaultCulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); type.InvokeMember("m_userDefaultUICulture", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static, null, culture, new object[] { culture }); } catch { } }
扩展阅读:
转载地址:http://eskpi.baihongyu.com/