【问题标题】:C# program stops working after the language setting in control panel is changed (say, from English to German)更改控制面板中的语言设置(例如,从英语到德语)后,C# 程序停止工作
【发布时间】:2013-01-31 19:58:05
【问题描述】:

我有一个用 C# 开发的软件,它是一个纯语义应用程序。但是,德国用户发现该软件在安装在德国计算机上时会不时停止工作。临时解决办法是在控制面板中更改语言设置,将语言设置从德语更改为英语后,它就可以正常工作了。这只是一种工程软件,该软件与德语或英语没有任何关系。此外,正如 msdn 中其他帖子所建议的那样,我已经多次检查了源代码中的“InitializeComponent()”。 “InitializeComponent()”函数中没有奇怪的代码。

【问题讨论】:

  • 试着修改你的问题:)
  • 你得到什么异常?你有一种日志文件吗?否则你就迷路了……
  • 您需要显示用户得到的实际异常。话虽如此,最有可能的原因是您试图解析表示日期或浮点数的字符串而不指定文化。结果是它使用德国文化来解析字符串,当字符串为英文格式时失败。
  • 你的软件对数字格式有什么作用吗?把它们读进去?我怀疑如果它对数字格式有任何作用,那就是问题所在。
  • 您的应用程序是否在复制/移动文件?

标签: c# .net


【解决方案1】:

更改语言环境时,会更改“,”(逗号)和“.”的含义(句号)用于数字时。会不会是您试图将包含这些字符的文本解析为数字?

您的程序是否尝试使用格式化数字初始化数字字段?

在解析和格式化文本时,您需要确保您的代码对用户的文化敏感。在读取存储到文件或通过网络发送的数据时,您还需要确保使用一致的文化(例如 InvariantCulture)。

【讨论】:

    【解决方案2】:

    如果您使用.NET Framework 4.5,您可能有兴趣阅读CultureInfo.DefaultThreadCurrentCulture Property。

    在 .NET Framework 4 和以前的版本中,默认情况下,文化 的所有线程设置为 Windows 系统文化。对于应用 其当前文化不同于默认系统文化,这 行为通常是不可取的。

    页面上的示例及其解释可能对您的问题很有帮助。

    另外,作为旁注,try{...}catch{...} 块总是受欢迎的。

    【讨论】:

    • 开发程序时,我有:"Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");"和更多 CultureInfo 对象。可能,我需要改变所有这些。基本上,我只懂英语,这是一个英语软件。而且我想,每个知道英语的人都可以使用这个软件。
    • 是的。我正在使用线程。此外,是否有一种方法可以使该软件以任何/大多数语言运行。
    • 如果您没有将区域性显式设置为en-USinside线程的启动委托,它将使用系统的区域性,而不是您的应用程序的区域性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2019-01-02
    • 2021-01-18
    相关资源
    最近更新 更多