本地化和线程问题

时间:2014-04-23 10:02:35

标签: c# multithreading winforms localization

Hellu

我试图翻译我的winforms应用程序,但它包含了线程和后台工作程序的众多用途。

事实是,当我在一个不是UI的线程中调用它时,我的程序似乎没有使用正确的resx文件(在我的情况下,这意味着在日志窗口中有法语文本用户界面是英文的。)

问题是:有没有办法将文化应用于我的应用程序在一个地方调用的每个线程?

1 个答案:

答案 0 :(得分:3)

设置CultureInfo.DefaultThreadCurrentUICulture

  

获取或设置当前应用程序域中线程的默认UI文化。

  

重要   如果尚未显式设置应用程序域中执行的任何现有线程的UI文化,则设置DefaultThreadCurrentUICulture属性也会更改这些线程的区域性

可是:

  

如果这些线程在另一个应用程序域中执行,则它们的文化由该应用程序域中的DefaultThreadCurrentUICulture属性定义,如果没有定义默认值,则由默认系统文化定义。因此,我们建议您始终显式设置主应用程序线程的文化,不要依赖DefaultThreadCurrentUICulture属性来定义主应用程序线程的文化。

因此,在启动时,在主线程上,设置CultureInfo.CurrentUICulture CultureInfo.DefaultThreadCurrentUICulture

同样适用于CultureInfo.DefaultThreadCurrentCultureCultureInfo.CurrentCulture

这些都不适用于线程中的操作,其中线程设置其当前(UI)文化或显式地将IFormatProvider传递给格式化方法或CultureInfo传递给资源获取方法。

此外,{4.5}添加了DefaultThreadCurrentCultureDefaultThreadCurrentUICulture,如果您需要定位旧版本,那么您将无法设置CurrentCultureCurrentUICulture在每个线程开始(或池入口点)或为每个使用区域设置信息的方法传递显式文化(FXCop将在这里提供帮助:可以警告所有未执行此操作的方法调用)。