C#BackgroundWorker 的文化

2024-03-30

我想为我的整个应用程序设置文化。我尝试了以下操作:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(wantedCulture);
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(wantedCulture);
Application.CurrentCulture = CultureInfo.CreateSpecificCulture(wantedCulture);

它适用于当前线程,但稍后我创建并启动一个后台工作线程。当我创建工作线程时,当前线程使用wantedCulture执行,但工作线程将使用我的计算机的区域性运行。

有什么想法可以为整个应用程序设置文化吗?


注意:过时的材料,请务必阅读底部的更新以了解 .NET 4.6 中的更改

是的,这是一个常见的请求,但无法实现。 Windows 始终将操作系统线程初始化为系统默认 LCID,该 LCID 在控制面板的区域和语言选项小程序中配置。只要您自己创建线程,您就可以覆盖它。但这对于线程池线程和可能由运行进程的某种非托管代码(如 COM 服务器)创建的线程来说并不实用。

后一种情况就是问题所在。 .NET 在由非托管代码创建的线程上运行托管代码没有任何问题。但它无法对线程的初始化方式做任何事情。对于 CurrentUICulture 来说是这样,但对于 Thread.SetApartmentState() 这样更晦涩难懂的东西也是如此。不要低估这样的线程在您的程序中运行代码的可能性,Microsoft 编写的 COM 服务器非常适合线程。

您必须仔细检查您的代码,并找到可能在您未创建的线程上运行的任何代码。任何事件处理程序都是可疑的,任何具有回调的 BeginXxx() 方法也是如此。 BackgroundWorker 绝对是较小的问题。

不覆盖线程的区域性会产生very微妙且难以诊断 bugz。一个很好的例子是一个以字符串为键的 SortedList。当使用错误的区域性运行时,它会随机无法找到列表中实际存在的元素。由于列表在具有不同排序规则的另一种文化中不再排序所致。

如果我成功地吓到了你,那么我就传达了我的信息。这发生在我身上,当时我正在调试一个在丹麦机器上行为异常的大型程序的问题。我们没有丹麦语本地化,因此强制用户界面以英语运行。工作线程使用以字符串作为键的红黑树。当被要求对付奥德瓦克斯时,它随机失败。我花了一周时间。


更新:此问题已在 .NET 4.5 中得到解决。 CultureInfo 类现在有一个默认线程当前文化 http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture%28v=vs.110%29.aspx和 DefaultThreadCurrentUICulture。设置后,它将用于初始化任何托管线程的区域性,而不是默认的 Windows 系统区域性。我还不清楚它如何与由本机代码启动并输入托管代码的线程交互。


更新:这个问题在.NET 4.6中有更彻底的解决方案。现在,文化会自动流动,这是理想的行为。 MSDN 文章为CultureInfo.CurrentCulture() https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture%28v=vs.110%29.aspx谈论它。提供的信息仍然令人困惑,实验上它似乎也流向 Thread 对象,而不仅仅是任务或线程池线程,并且不使用 DefaultThreadCurrentCulture。进两步,退一步,建议进行测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#BackgroundWorker 的文化 的相关文章

  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 转换 const void*

    我有一个函数返回一个const void 我想用它的信息作为char 我可以将它投射为 C 风格的罚款 char variable但是当我尝试使用reinterpret cast like reinterpret cast
  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 语音识别编程问题入门

    所以 你们可能都看过 钢铁侠 其中托尼与一个名为贾维斯的人工智能系统进行交互 演示剪辑here http www youtube com watch v Go8zsh1Ev6Y 抱歉 这是广告 我非常熟悉 C C 和 Visual Basi
  • 如何在 C# Designer.cs 代码中使用常量字符串?

    如何在 designer cs 文件中引用常量字符串 一个直接的答案是在我的 cs 文件中创建一个私有字符串变量 然后编辑 Designer cs 文件以使用此变量 而不是对字符串进行硬编码 但设计者不喜欢这样抛出错误 我明白为什么这行不通
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • memcpy/memmove 到联合成员,这是否设置“活动”成员?

    重要说明 一些评论者似乎认为我是从工会抄袭的 仔细看memcpy 它从普通旧地址复制uint32 t 它不包含在联合中 另外 我正在复制 通过memcpy 到工会的特定成员 u a16 or u x in a union 不直接到整个联盟本
  • 将 Lambda 表达式树与 IEnumerable 结合使用

    我一直在尝试了解有关使用 Lamba 表达式树的更多信息 因此我创建了一个简单的示例 这是代码 如果作为 C 程序粘贴到 LINQPad 中 它可以工作 void Main IEnumerable
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR
  • 如何在 C 中将 char 连接到 char* ?

    我怎样才能前置char c to char myChar 我有c值为 A and myChar值为 LL 我怎样才能前置c to myChar使 ALL 这应该有效 include

随机推荐

  • Springfox 类参数已弃用

    在Springfox 3 0中 springfox documentation service Parameter已弃用 是否有提供参数及其构建器的更新方法 以及如何提供其default value 首先 使用RequestParamete
  • 使用 function.php 的单一产品的 Woocommerce 元数据

    我正在努力通过我的functions php 正确过滤元数据 I can get this to work if I edit the meta php in my child theme with no problem short sto
  • 将数据从VSS迁移到SVN

    如何将我的数据从 VSS 迁移到 SubVersion 这取决于您是否想随身携带 VSS 元数据 如果是 请看一下电源管理员 http www poweradmin com sourcecode vssmigrate aspx or Vss
  • 版本号大于 1.18.10 的正则表达式 [重复]

    这个问题在这里已经有答案了 我需要验证应用程序的版本号是否大于 1 18 10 在这种情况下 正则表达式应该是什么样子 不要为此使用正则表达式 使用split and tuple比较 def is recent version versio
  • 将点击事件与 Twitter Bootstrap 结合使用

    我正在使用 twitter bootstrap 开发一个可以在多个设备上呈现的 Web 应用程序 现在我想处理 点击 事件 所以我的问题是 我可以使用 jquery 1 7 2 处理 tap 事件而不使用 jquery Mobile 吗 如
  • minikube docker-env 是什么意思?

    在 Kubernetes 中minikube 教程 https kubernetes io docs tutorials hello minikube create your node js application有这个命令可以使用 Min
  • 如何在批处理脚本中找到应用程序的完整路径

    如何在批处理脚本中找到应用程序 XYZ 如果已安装 的完整路径 澄清 应用程序不在 PATH 中 我所拥有的就是它的名称 在本例中为 ISTool exe 我想得到C 程序 ISTool ISTool exe 您可以在路径 或其他类似路径的
  • 在类本身内部创建类实例是如何工作的?

    是什么使得在类本身内部创建类的实例成为可能 public class My Class My Class new class new My Class 我知道这是可能的 并且自己也做到了 但我仍然无法让自己相信这不是 谁先有鸡还是先有蛋 之
  • 中使用自定义模板名称

    目前我有这段代码 它为每个用户节点调用 用户 模板
  • 如何在没有 Root 设备的情况下使用自己的 Android 服务进行屏幕截图?

    我进行了很多搜索并找到了两个库 1 https code google com p android screenshot library https code google com p android screenshot library
  • 如何使用elasticsearch正确处理多词同义词扩展?

    我有以下同义词扩展 suco gt suco refresco bebida de soja 我想要的是以这种方式标记搜索 搜索 suco de laranja 将被标记为 suco laranja refresco bebida de s
  • 在 ggplot 或lattice 中利用 Surv 对象

    有人知道如何利用 ggplot 或lattice 进行生存分析吗 制作网格或类似面的生存图会很好 所以最后我尝试了一下 找到了卡普兰 迈耶图的解决方案 对于将列表元素放入数据框中的混乱代码 我深表歉意 但我无法找到其他方法 注意 它仅适用于
  • Jenkins Git 插件包含不工作的区域

    我无法使用 Git 插件在 Jenkins 中使用 包含区域 功能 我希望仅在 他的 目录发生更改时才构建作业 示例 项目 mytool 仅应在以下内容发生更改时构建GIT ROOT tools mytool 我在包含的区域字段中尝试了几种
  • 删除默认标题栏

    如何删除 Android 应用程序中默认的顶部标题栏 灰色的你好 Android 吧 删除标题栏非常简单 只需将 android theme 属性添加到 AndroidManifest xml 中即可
  • ICollection 的简单现有实现

    有没有简单的实现ICollection
  • AngularJS 指令中的 locals 代表什么

    AFAIK 这没有记录 但我在角度源中发现locals指令示例中的属性 angular module transclude directive pane function return restrict E transclude true
  • 如何使用已安装的斜纹登录网站?

    我刚刚安装成功TWILL https web archive org web 20180904160747 http twill idyll org 80 在 StackOverflow 一位非常支持的成员的帮助下在我的计算机上 你可以查看
  • 通用协方差和转换为 SuperType

    我有一个面向对象的问题 我认为它可以与通用协方差联系起来 我正在尝试构建一个模块化系统来导入不同类型的记录 模块包含常用方法 SalesModule 包含处理特定逻辑的函数 public interface IImportable void
  • 克隆 jQuery UI 日期选择器时出现问题

    我有一个 div 其中有一个日期选择器 我用这样的东西来克隆它 mydiv someDiv works fine so far mydiv find input datefield datepicker clone without the
  • C#BackgroundWorker 的文化

    我想为我的整个应用程序设置文化 我尝试了以下操作 Thread CurrentThread CurrentCulture CultureInfo CreateSpecificCulture wantedCulture Thread Curr