获得用户文化,而不是线程文化

时间:2017-10-07 05:56:38

标签: c# .net vb.net winforms

当我的应用程序启动时,它将自己的文化设置为CultureInfo.InvariantCulture,但在某些地方,我想根据用户在Windows中设置的内容使用本地化的数字格式。我怎样才能做到这一点? System.Globalization.CultureInfo.CurrentCulture仅返回不再是用户默认的线索文化。

我希望在更改线程或创建新线程之前,比存储线程的默认文化更优雅,只是为了从中读取文化。

也许有一个用于Windows函数GetUserDefaultLocaleName的内置.Net包装器?

1 个答案:

答案 0 :(得分:2)

System.Globalization.CultureInfo有一个名为UserDefaultCulture的内部属性,它是Win32 GetUserDefaultLCID()的等效项,如.NET代码中所述:

//
// This is the equivalence of the Win32 GetUserDefaultLCID()
//
internal static CultureInfo UserDefaultCulture

因此,您可以使用它以这种方式获取用户默认文化:

var property = typeof(System.Globalization.CultureInfo).GetProperty("UserDefaultCulture",
    System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
var culture = (System.Globalization.CultureInfo)property.GetValue(null);

另外,您可以创建一个新线程并使用其CurrentCulture属性:

var culture = new System.Threading.Thread(() => { }).CurrentCulture;