c# - 如何更改 .Net 中整个进程(而不仅仅是当前线程)的 CurrentCulture?

标签 c# .net localization globalization

在某些情况下,我需要将进程的语言环境设置为 en-US。

我知道如何为当前线程执行此操作:

System.Threading.Thread.CurrentThread.CurrentCulture = 
     System.Globalization.CultureInfo.CreateSpecificCulture("en-US");

但我的应用程序使用 BackgroundWorkers 进行一些处理,并且这些工作线程的语言环境似乎不受上述对其生成主线程的更改的影响。

那么我如何才能为我的应用程序中的所有线程设置语言环境,而无需在每个线程中手动设置呢?

最佳答案

如果您想这样做,您必须更改操作系统区域设置。您出于什么原因希望 BackgroundWorkers 在 en-US 中运行?

您应该让您的业务层在不变的文化中运行,并且只为最终用户的 UI 提供特定的文化。

如果您使用的是 BackgroundWorker组件,并且必须这样做你可以在 DoWork 方法中尝试这样的事情:

// In DoWork
System.Globalization.CultureInfo before = System.Threading.Thread.CurrentThread.CurrentCulture;
try

{
    System.Threading.Thread.CurrentThread.CurrentCulture = 
        new System.Globalization.CultureInfo("en-US");
 // Proceed with specific code
}

finally
{
    System.Threading.Thread.CurrentThread.CurrentUICulture = before;
}

关于c# - 如何更改 .Net 中整个进程(而不仅仅是当前线程)的 CurrentCulture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460023/

相关文章:

javascript - htmleditorextender 无法上传图片

.NET 框架兼容性 : 3. 5 SP1 和 4.0 客户端配置文件

.net - 时间是否倒退到了1890年代?如何解释令人惊讶的 DateTime.ToOADate 负值图表?

java - 如何定位具有动态连词数的句子?

c# - 如果您实现了 ASP.NET 路由,ASP.NET 中的 PageMethods 将无法工作

C# 试图用秒表包装一个函数

c# - MVC 对 ViewPage 本身强类型化

.net - 为什么 SynchronizationContext 不能正常工作?

c# - WinForms 应用程序的正确本地化

html - 带有 Internet Explorer 的文本框中的阿拉伯数字