C# 设置线程的默认CultureInfo
2015-08-15 13:08
671 查看
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)
示例代码:
扩展阅读:
SETTING DEFAULT CURRENTCULTURE IN ALL VERSIONS OF .NET
根据 Windows 区域设置生成区域性
.NET Framework 中的格式化类型
在 .NET Framework 中分析字符串
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 { } }
扩展阅读:
SETTING DEFAULT CURRENTCULTURE IN ALL VERSIONS OF .NET
根据 Windows 区域设置生成区域性
.NET Framework 中的格式化类型
在 .NET Framework 中分析字符串
相关文章推荐
- C# 逻辑语句
- 编写高质量代码改善C#程序的157个建议——建议34:为泛型参数设定约束
- C#装箱拆箱 Nullable
- C# 使用Method进行转换
- C#占位符与格式化字符串
- 编写高质量代码改善C#程序的157个建议——建议33:避免在泛型类型中声明静态成员
- c# 隐式转换 强制转换
- C# abstract类 和 interface 的 区别
- 编写高质量代码改善C#程序的157个建议——建议32:总是优先考虑泛型
- [转]用C#如何实现大文件的断点上传
- C#读取配置文件ini注意事项
- c# 动态执行脚本,相关的几个脚本引擎.
- 编写高质量代码改善C#程序的157个建议——建议31:在LINQ查询中避免不必要的迭代
- C#操作Excel(创建、打开、读写、保存)几种方法的总结
- 编写高质量代码改善C#程序的157个建议——建议30:使用LINQ取代集合中的比较器和迭代器
- c#美味: 微软图表控件MSChart安装部署
- 编写高质量代码改善C#程序的157个建议——建议28:理解延迟求值和主动求值之间的区别
- 编程:C#调用Python模块
- C#删除文件和文件夹到回收站
- 编写高质量代码改善C#程序的157个建议——建议27:在查询中使用Lambda表达式