如何在C#中获取当前的区域设置?

Shu*_*ric 24 c# cultureinfo

通常你可以写一些像这样的东西

CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

但是这样您只能获得在启动应用程序时配置的CultureInfo,如果之后设置已更改,则不会更新.

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

Dar*_*rov 29

正如@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
    }
Run Code Online (Sandbox Code Playgroud)

}

请注意,如果您还需要重置CurrentUICulture,则应单独执行

Thread.CurrentThread.CurrentUICulture.ClearCachedData()
Run Code Online (Sandbox Code Playgroud)


Chr*_*ter 6

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