2014-04-23 69 views
0

Hellu本地化和線程問題

我試圖翻譯我的winforms應用程序,但它包含線程和背景工作人員的衆多用途。

事實上,我的程序似乎沒有使用正確的resx文件,當我在一個不是UI的線程中調用它時(在我的情況下,這意味着在日誌窗口中有法文文本,而用戶界面是英文)。

問題是:有沒有辦法將文化應用到我的應用程序在單個地方調用的每個線程中?

回答

3

CultureInfo.DefaultThreadCurrentUICulture

獲取或設置默認的UI文化在當前應用程序域線程。

重要 如果你還沒有明確設置應用程序域中執行任何現有的線程的UI文化,設置DefaultThreadCurrentUICulture性質也改變了這些線程的文化

但是:

如果這些線程在另一個應用程序域中執行,則其文化由該應用程序域中的DefaultThreadCurrentUICulture屬性定義,或者如果未定義默認值,則由默認系統區域定義。因此,我們建議您始終明確設置主應用程序線程的文化,而不要依賴DefaultThreadCurrentUICulture屬性來定義主應用程序線程的文化。

因此,在啓動時,在主線程,同時設置CultureInfo.CurrentUICultureCultureInfo.DefaultThreadCurrentUICulture

並且類似地對於CultureInfo.DefaultThreadCurrentCultureCultureInfo.CurrentCulture

這些都不適用於線程中的操作,其中線程要麼設置其當前(UI)文化,要麼明確地將IFormatProvider傳遞給格式化方法,或者將CultureInfo傳遞給資源獲取方法。

此外,雙方DefaultThreadCurrentCultureDefaultThreadCurrentUICulture用.NET 4.5中加入,如果你需要的目標較舊版本,那麼你被卡住或者設置CurrentCultureCurrentUICulture在每個線程啓動(或池入口點)或傳遞一個明確的文化對於使用語言環境信息的每種方法(FXCop將在此處提供幫助:可以在未完成此操作的情況下警告所有方法調用)。

+0

這就是我所擔心的,我確實超出了我的工作崗位4.5版本。不管怎麼說,還是要謝謝你! – Kilazur