【问题标题】:Which CultureInfo-property do i set to use it in all application threads我将哪个 CultureInfo 属性设置为在所有应用程序线程中使用它
【发布时间】:2017-02-09 10:42:56
【问题描述】:

我正在使用 VS 2015 开发 WPF 应用程序,用户可以在其中更改应用程序语言在运行时。

目前我们还没有使用多个线程,但也许这会到来。

最大的问题是,CultureInfo 类的哪个属性最好为应用程序的所有线程设置?

有四个候选人:

  1. CultureInfo.CurrentCulture

  2. CultureInfo.CurrentUICulture

  3. CultureInfo.DefaultThreadCurrentCulture

  4. CultureInfo.DefaultThreadCurrentUICulture

根据这个article,它似乎是 CultureInfo.DefaultThreadCurrentCulture 和 CultureInfo.DefaultThreadCurrentUICulture,但我不确定。

提前致谢!

【问题讨论】:

  • WPF 是 tricky(重复?)。
  • .NET 4.6 的重大变化,标记的答案不再正确。文化现在自动流动,最好的事情就是什么都不做。当然,你不能改变已经在运行的线程的文化,这种文化没有改变。
  • @HansPassant,很高兴知道,谢谢。我们仍在使用 4.5 和所有那些糟糕的解决方法。
  • 4.5 不再受 Microsoft 支持,升级到 4.6 非常简单。

标签: c# wpf multithreading


【解决方案1】:

CultureInfo.DefaultThreadCurrentCultureCultureInfo.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- 设置源值美国文化)。我只是想预测您的下一个非常可能的问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 2017-03-18
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2012-01-28
  • 2015-11-21
相关资源
最近更新 更多