C# NET中的系统区域设置

C# NET中的系统区域设置,c#,locale,culture,C#,Locale,Culture,我已通过将系统区域设置设置为中文(简体PRC) 然后我重新启动了计算机并运行了.NET4.0应用程序 运行 Thread.CurrentThread.CurrentCulture.Name 返回 en-GB 为什么?这么说 默认区域性和格式模式等信息是 在第一次请求时将其缓存。这些信息可以改变 在AppDomain的生命周期内,例如,当用户修改 控制面板的区域和语言选项部分。然而, CultureInfo类不会自动检测数据库中的更改 系统设置 先叫这个 Thread.CurrentThre

我已通过将系统区域设置设置为中文(简体PRC)

然后我重新启动了计算机并运行了.NET4.0应用程序

运行

Thread.CurrentThread.CurrentCulture.Name
返回

en-GB
为什么?

这么说

默认区域性和格式模式等信息是 在第一次请求时将其缓存。这些信息可以改变 在AppDomain的生命周期内,例如,当用户修改 控制面板的区域和语言选项部分。然而, CultureInfo类不会自动检测数据库中的更改 系统设置

先叫这个

 Thread.CurrentThread.CurrentCulture.ClearCachedData();

看起来要查看系统区域设置的位置是system.Text.Encoding.Default


注:“…更改系统区域设置”影响用于“非Unicode”应用程序的ANSI代码页(来自Win32 API的*A()调用)。在大多数情况下,.NET应用程序不需要关心它,因为它们使用Unicode字符串和Unicode API。但是我必须与非unicode应用程序交互,因此我需要查询当前系统区域设置。

请尝试:Thread.CurrentThread.CurrentUICulture.Name(注意UI)我获得了与
Thread.CurrentThread.CurrentUICulture.Name
相同的行为,我可以通过将
区域和语言>>格式设置为
中文(简体PRC)
来获得
Thread.CurrentThread.CurrentCulture.Name
以返回预期值。这是预期的行为吗?.NET中公开的区域性似乎只受此“格式”设置的影响。@Ben我没有收到您的问题更改
控制面板>>区域和语言>>管理>>更改系统区域设置
似乎没有更改
线程.CurrentThread.CurrentCulture.Name
中公开的值。相反,根据我的实验,设置
控制面板>>区域和语言>>格式
就行了。这是根据你的理解。我假设在控制面板中设置“区域设置”将在.NET中设置区域设置。我必须检查System Local的更改。尽管MSDN确实指出更改默认格式会影响区域性
 Thread.CurrentThread.CurrentCulture.ClearCachedData();