c# - 在不更改 Windows 区域设置的情况下更改应用程序的区域设置

标签 c# .net-4.0 locale culture

我遇到了一个有趣的情况,区域设置与我的 C# 应用程序混淆了,因为我没有意识到像 Double.Parse 这样的方法不会将“1000”转换为 1000,而是由于不同的编号格式而做一些意想不到的事情.

我的问题的一个解决方案是使用类似 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 中没有这样的东西。

谁能为这个语言环境问题推荐一个好的解决方案?

最佳答案

如果新线程不使用相同的语言环境,您可以像这样启动它们:

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

没有试过,但我想它可以工作

关于c# - 在不更改 Windows 区域设置的情况下更改应用程序的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18411960/

相关文章:

c# - DeleteFiles 任务从匹配列表中排除单个文件

c# - 我应该如何从 Entity Framework 4.1 中的存储过程返回一个 int?

c# - 如何在 Azure Key Vault 中序列化和反序列化 PFX 证书?

asp.net - 使用 4.0 框架和 Visual Studio 2010 为 ASP Classic 构建 COM 互操作库

locale - 如何在不收到警告且不使用类型类的情况下重载符号?

c++ - 为什么这个 C++ money_put<char> 程序不工作?

c# - 我可以在 WinForms 中将菜单拆分为多列吗?

wcf - 通过.NET 1.1调用.NET 4.0组件

c# 多个调度选项?

javascript - toLocaleString 价格不带小数点零