2013-08-23 199 views
3

我有一个有趣的情况,语言环境设置与我的C#应用​​程序混淆,因为我没有意识到像Double.Parse这样的方法不会将“1000”转换为1000,但由于编号格式不同,请做一些意想不到的事情。更改应用程序的语言环境而不更改Windows语言环境

我的问题的一个解决方案是使用类似double d = double.parse("1000", new CultureInfo("en-US"));的东西。目前,我没有通过CultureInfo。然而,我不知道是否可能在启动时影响的区域设置,而仅仅是我的应用程序

我发现了一个article on MSDN,说我可以用下面的代码实现这一点:

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中什么。

任何人都可以推荐一个很好的解决方案,这个地区的问题?

回答

0

最后我只是想出来。在.NET 4.0中,新线程不是继承它们创建的线程的语言环境。我确实为每个MSDN文档设置了CurrentCultureCurrentUICulture,并且所有测试昨天都通过了,所以这是件好事。

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(); 
} 

没试过,但我GESS它可以工作

0

你可能不得不手动设置它们.NET 4.0,像FelipeP建议,因为新的将始终与系统默认启动的文化(见这里Set default thread culture for all thread?细节)

+0

是的,我已经证实,并实施修复,谢谢! – Dave

+0

如果它解决了您的问题,请将其标记为答案。 –

相关问题