如何获得在C#中当前的区域设置?(How to get current regional setti

2019-07-21 16:23发布

通常情况下,你可以通过编写像得到它

CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

不过这样一来,你只能得到的CultureInfo这是目前应用程序的启动配置,如果设置已经改变之后将不会更新。

那么,如何让当前的CultureInfo控制面板中的配置 - >区域和语言设置?

Answer 1:

作为@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()


Answer 2:

Thread.CurrentThread.CurrentCulture.ClearCachedData()看起来将导致重新读取文化数据时,它在下一次访问。



Answer 3:

您可以使用Win32 API函数GetSystemDefaultLCID。 该signiture情况如下:

[DllImport("kernel32.dll")]
static extern uint GetSystemDefaultLCID();

GetSystemDefaultLCID函数返回LCID。 可以从如下因素表映射语言的字符串。 由微软指定区域ID



Answer 4:

我们遇到了这个问题与我们的WinForms应用程序,这是由于Visual Studio中创建[MyApp的] .vshost.exe过程始终在后台运行时Visual Studio是开放的。

关闭MyApp的 - >属性 - >调试 - >“启用的Visual Studio宿主进程”设置固定这对我们来说。

该vshost工艺主要用于改善调试,但如果你不希望禁用的设置,您可以根据需要终止进程。



Answer 5:

有类CultureInfoTextInfo从命名空间System.Globalization 。 这两个类得到几个窗口在控制面板中定义的区域设置。 可用设置的列表的文件中。

例如:

string separator = CultureInfo.CurrentCulture.TextInfo.ListSeparator;

越来越针对正在运行的程序列表分隔符。



Answer 6:

试着找到你想要的设置在SystemInformation类或使用类调查WMI System.Management/System.Diagnostics ,你可以使用LINQ到WMI太



Answer 7:

[DllImport("kernel32.dll")]
private static extern int GetUserDefaultLCID();

public static CultureInfo CurrentCultureInRegionalSettings => new CultureInfo(GetUserDefaultLCID());


文章来源: How to get current regional settings in C#?