【问题标题】:How to open a form on a separate thread due to language requirements由于语言要求,如何在单独的线程上打开表单
【发布时间】:2011-01-27 18:51:43
【问题描述】:

我正在使用 .NET 4.0。我所有的表格都启用了本地化,并被翻译成 3 种语言。 我想打开我的主表单,我们在 program.cs 中运行的那个,作为带有语言按钮的登录表单。选择语言后,由于我无法更改当前线程的文化信息,我想在请求的文化中打开一个新线程。最简单的方法是什么?

谢谢

【问题讨论】:

  • 为什么不能改变当前线程的文化?

标签: c# .net winforms multithreading localization


【解决方案1】:
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-ca");

【讨论】:

    【解决方案2】:

    不要这样做,它无法通过设计可靠地工作。您将遇到的第一个明显缺陷是所有 Windows 对话框都不会更改其语言(MessageBox、OpenFileDialog 等)。他们总是使用系统语言。更严重的是不明显的缺陷。您无法轻松控制任何线程的文化,尤其是线程池线程。他们会做一些讨厌的事情,比如填充一个 SortedList,一个在 UI 线程中不再排序的列表。许多其他类似这样的微妙问题。

    此外,它是用户永远不需要的功能。他们不会即时切换母语。如果机器真的被多语言用户使用,那么它将有一个允许切换系统语言的 Windows 版本。您的应用会自动效仿。

    【讨论】:

    • 此特定程序实际上需要该功能,因为它是在不说本国语言的外国工人的环境中运行的。
    • 我了解您对创建和管理线程的担忧。那么,你会怎么做呢?谢谢
    • 没有好的解决方案。 .NET 使用大量它自己创建的 TP 线程。
    • @user592719:如果机器是外劳使用的,那就安装外语然后开机。你的应用不应该这样做。
    【解决方案3】:

    MyThread.CurrentUICulture = value;您可以阅读更多here.

    【讨论】:

      猜你喜欢
      • 2011-06-02
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多