通常情况下,你可以通过编写像得到它
CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
不过这样一来,你只能得到的CultureInfo这是目前应用程序的启动配置,如果设置已经改变之后将不会更新。
那么,如何让当前的CultureInfo控制面板中的配置 - >区域和语言设置?
通常情况下,你可以通过编写像得到它
CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
不过这样一来,你只能得到的CultureInfo这是目前应用程序的启动配置,如果设置已经改变之后将不会更新。
那么,如何让当前的CultureInfo控制面板中的配置 - >区域和语言设置?
作为@Christian提出ClearCachedData是使用方法。 但根据MSDN:
该ClearCachedData方法不刷新Thread.CurrentCulture属性现有的线程的信息
所以,你需要先调用函数,然后开始一个新的线程。 在这个新的线程,你可以使用的CurrentCulture,得到培养的新鲜值。
class Program
{
private class State
{
public CultureInfo Result { get; set; }
}
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture.ClearCachedData();
var thread = new Thread(
s => ((State)s).Result = Thread.CurrentThread.CurrentCulture);
var state = new State();
thread.Start(state);
thread.Join();
var culture = state.Result;
// Do something with the culture
}
}
请注意,如果您还需要重置的CurrentUICulture,您需要单独做
Thread.CurrentThread.CurrentUICulture.ClearCachedData()
Thread.CurrentThread.CurrentCulture.ClearCachedData()
看起来将导致重新读取文化数据时,它在下一次访问。
您可以使用Win32 API函数GetSystemDefaultLCID。 该signiture情况如下:
[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();
GetSystemDefaultLCID函数返回LCID。 可以从如下因素表映射语言的字符串。 由微软指定区域ID
我们遇到了这个问题与我们的WinForms应用程序,这是由于Visual Studio中创建[MyApp的] .vshost.exe过程始终在后台运行时Visual Studio是开放的。
关闭MyApp的 - >属性 - >调试 - >“启用的Visual Studio宿主进程”设置固定这对我们来说。
该vshost工艺主要用于改善调试,但如果你不希望禁用的设置,您可以根据需要终止进程。
有类CultureInfo
和TextInfo
从命名空间System.Globalization
。 这两个类得到几个窗口在控制面板中定义的区域设置。 可用设置的列表的文件中。
例如:
string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
越来越针对正在运行的程序列表分隔符。
试着找到你想要的设置在SystemInformation
类或使用类调查WMI System.Management/System.Diagnostics
,你可以使用LINQ到WMI太
[DllImport("kernel32.dll")]
private static extern int GetUserDefaultLCID();
public static CultureInfo CurrentCultureInRegionalSettings => new CultureInfo(GetUserDefaultLCID());