use*_*499 3 .net c# vb.net winforms
当我的应用程序启动时,它会设置自己的文化,CultureInfo.InvariantCulture
但在某些地方,我想根据用户在 Windows 中设置的内容使用本地化的数字格式。我怎样才能做到这一点?
System.Globalization.CultureInfo.CurrentCulture
只返回不再是用户默认的线程文化。
我希望有一种更优雅的方式,而不是在更改它之前存储线程的默认文化或创建一个新线程只是为了从中读取文化。
也许 Windows 功能有一个内置的 .Net 包装器GetUserDefaultLocaleName
?
System.Globalization.CultureInfo
有一个名为的内部属性UserDefaultCulture
,它与GetUserDefaultLCID()
.NET 源代码中注释的 Win32 等效:
Run Code Online (Sandbox Code Playgroud)// // 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);
Run Code Online (Sandbox Code Playgroud)
作为另一种选择,您可以创建一个新线程并使用其CurrentCulture
属性:
var culture = new System.Threading.Thread(() => { }).CurrentCulture;
Run Code Online (Sandbox Code Playgroud)