我将哪个 CultureInfo 属性设置为在所有应用程序线程中使用它
Posted
技术标签:
【中文标题】我将哪个 CultureInfo 属性设置为在所有应用程序线程中使用它【英文标题】:Which CultureInfo-property do i set to use it in all application threads 【发布时间】:2017-02-09 10:42:56 【问题描述】:我正在使用 VS 2015 开发 WPF 应用程序,用户可以在其中更改应用程序语言在运行时。
目前我们还没有使用多个线程,但也许这会到来。
最大的问题是,CultureInfo 类的哪个属性最好为应用程序的所有线程设置?
有四个候选人:
CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
CultureInfo.DefaultThreadCurrentCulture
CultureInfo.DefaultThreadCurrentUICulture
根据这个article,它似乎是 CultureInfo.DefaultThreadCurrentCulture 和 CultureInfo.DefaultThreadCurrentUICulture,但我不确定。
提前致谢!
【问题讨论】:
WPF 是 tricky(重复?)。 .NET 4.6 的重大变化,标记的答案不再正确。文化现在自动流动,最好的事情就是什么都不做。当然,你不能改变已经在运行的线程的文化,这种文化没有改变。 @HansPassant,很高兴知道,谢谢。我们仍在使用 4.5 和所有那些糟糕的解决方法。 4.5 不再受 Microsoft 支持,升级到 4.6 非常简单。 【参考方案1】:CultureInfo.DefaultThreadCurrentCulture
和CultureInfo.DefaultThreadCurrentUICulture
:
Set default thread culture for all thread?
Culture 和 UICulture 的区别在于前者影响格式(日期、货币等),而后者影响资源:
What is the difference between Culture and UICulture?
【讨论】:
非常感谢mm8。 你错过了wpf
标签,控件有使用自己的文化。我什至不得不创建custom binding 来克服一些奇怪的问题(即控制面板中当前文化设置的更改,这些不是自动进行的)。否则答案是正确的(它会为例如 winforms 应用程序做这件事)。
控件是在 UI 线程上创建的。 CultureInfo.DefaultThreadCurrentCulture 和 CultureInfo.DefaultThreadCurrentUICulture 属性会影响应用程序可能创建的其他线程。问题是关于“多线程”,不是吗?您不会在后台线程上创建控件。
@Sinatr :在我们的例子中,我们通过属性从数据库中读取标题和内容的文本。我知道它也适用于 RESX 文件。
@PatrickPirzer,仍然,如果你不改变文化properly 你的TextBox
突然不能正确识别用户输入的数字(因为绑定将尝试使用默认 en- 设置源值美国文化)。我只是想预测您的下一个非常可能的问题。以上是关于我将哪个 CultureInfo 属性设置为在所有应用程序线程中使用它的主要内容,如果未能解决你的问题,请参考以下文章
在 WPF 绑定中使用“真实”CultureInfo.CurrentCulture,而不是 IetfLanguageTag 中的 CultureInfo
.NET 中 CultureInfo 的 CurrentCulture 和 CurrentUICulture 属性有啥区别?