如何在.NET中定义应用程序的区域设置

问题描述:

我有一个使用Visual C++ 2008 Express Edition在Windwos XP下开发的应用程序,该应用程序在一台计算机上运行,​​默认语言设置为英语。但是,如果在具有默认语言德语的另一台计算机上运行相同的应用程序,则会遇到麻烦,因为预定义的字符串Infinity在使用ToDouble转换为双精度字符时未被识别,因为在德语平台上字符串应该是Unendlich。特别是mscorlib正确投出FormatException如何在.NET中定义应用程序的区域设置

如何强制应用程序使用英文语言环境运行?我还找不到任何选项...

感谢您的任何提示。

使用Convert :: ToDouble(str,System :: Globalization :: CultureInfo :: InvariantCulture);

+0

谢谢,这将暂时解决问题... – stefangachter 2010-09-20 17:38:54

可以将当前的区域设置为英语有:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); 

这将迫使美国英语在当前线程。如果你在主Windows窗体线程中这样做,那么你的UI文化将永远是英语。有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/b28bx3bh(v=VS.100).aspx

正如汉斯在他的评论中指出的那样,这不会影响池线程并可能导致一些难以发现的错误。事实证明,没有任何全局设置可以使每个线程都使用您定义的文化。如果您需要该功能,则必须进行自己的应用程序范围设置,并确保所有线程都使用它。

也很好阅读将Globalizing Windows Forms

+1

它不会,运行I/O完成调用的线程池线程以及不会以系统语言运行的线程池线程。这可能会导致非常微妙且难以诊断的错误。例如,SortedList突然不再被排序。 – 2010-09-20 16:08:10

+0

是的。让我解决这个问题。 – 2010-09-20 16:17:25

+0

谢谢!太糟糕了,没有全球选择。不过,我会看看上面提到的链接。 – stefangachter 2010-09-20 17:41:22

Convert.ToDouble(stringValue, System.Globalization.CultureInfo.InvariantCulture);