C# 更改应用程序';s语言环境,而不更改Windows语言环境
我遇到了一个有趣的情况,语言环境设置打乱了我的C#应用程序,因为我没有意识到像Double.Parse这样的方法不会将“1000”转换为1000,而是由于不同的编号格式而做了一些意想不到的事情 我的问题的一个解决方案是使用类似于C# 更改应用程序';s语言环境,而不更改Windows语言环境,c#,.net-4.0,locale,culture,C#,.net 4.0,Locale,Culture,我遇到了一个有趣的情况,语言环境设置打乱了我的C#应用程序,因为我没有意识到像Double.Parse这样的方法不会将“1000”转换为1000,而是由于不同的编号格式而做了一些意想不到的事情 我的问题的一个解决方案是使用类似于double d=double.parse(“1000”,newcultureinfo(“en-US”)。目前,我没有通过CultureInfo。然而,我不必在整个代码中都做这样的更改,而是想知道是否有可能在启动时只影响我的应用程序的语言环境 我发现了一个例子,上面说我可
double d=double.parse(“1000”,newcultureinfo(“en-US”)代码>。目前,我没有通过CultureInfo。然而,我不必在整个代码中都做这样的更改,而是想知道是否有可能在启动时只影响我的应用程序的语言环境
我发现了一个例子,上面说我可以通过以下代码实现这一点:
using System.Threading;
using System.Globalization;
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
但它没有说明从主线程派生的工作线程是否也会继承父线程的区域性
我假设情况并非如此,因为在.NET 4.5中,显然有一个新的CultureInfo.DefaultThreadCurrentCulture
属性指定应用程序域中所有线程的区域性,但在.NET 4.0中没有类似的内容
有人能推荐一个解决此区域设置问题的好方法吗?如果新线程不使用相同的区域设置,您可以这样启动它们:
Thread theNewThread = new Thread(() =>
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
//Make something else
});
theNewThread.Start();
或者以其他方式
public static void Start(this Thread thread, CultureInfo cu)
{
//Set the CU here..
thread.Start();
}
我没有试过这个,但我觉得它可以用我最后只是试了一下。在.NET4.0中,新线程不会继承创建它们的线程的区域设置。我确实根据MSDN文档设置了CurrentCulture
和CurrentUICulture
,昨天所有的测试都通过了,所以这是一件好事。您可能必须像FelipeP建议的那样在.NET 4.0上手动设置它们,因为新的设置总是以系统默认区域性开始(请参见此处的详细信息)是的,我已经确认并实施了修复,谢谢!所以,从您的句子来看,不清楚在线程上设置区域设置是否在.NET4.0上起作用?嗯。。我认为这很清楚是的,在.NET4.0中设置线程的区域设置是有效的。