我应用程序中没有GUI或UI,而是将写入文件,分析由其他应用程序(在XML和其他人)。

我有个客户,其默有NumberDecimalSeparator设置一个逗号,这会导致分析错误与浮点数(PI会结束了 3,1415).

我想的一种方式设置默全球应用程序内,对于所有的螺纹。我已经试过:

  1. 在(显然)习惯做法的设定 CurrentThread.CurrentCulture 作为第一线 主() 但它似乎得到重置。
  2. 一个变化/膨胀上 http://www.codeproject.com/KB/cs/Change_App_Culture.aspx
  3. 这样做(#1)在确地建线程中的应用。

并改变使用的明确格式化不是一个选项(150万+线,大多数编写的前雇员).

[编辑] 该应用程序结合为一个插座和处理的请求从专门的客户。这取决于请求的种类型它产生不同的处理程序类。

对不起,当我第一次发表我应该澄清#1(虽然我)我已经做到了这一点在所有的处理程序被明确地产生了,也是。

事实证明,我错过了在线处理程序,这是造成问题。 因此应用程序是否正常工作现在,但问题仍然是关于如果文化上可设置的所有螺纹。

如果可以迭代所有线,它将解决该问题。所以:

我怎么能得到所有 螺纹 对象(不 ProcessThread)在目前的进程?

有帮助吗?

解决方案

不幸的是,每一个新的线开始有系统区域信息,即使这是从一个线程,有其区域变为别的东西。

这是一个巨大的疑难杂症,我遇到一个我们应当使用 BackgroundWorker 加载文件。

这办法我已经成功地使用于设置区域上的启动线,然后使用的一线工厂创建线的"应用的区域设置。" 为BackgroundWorkers你可以使用工厂或其衍生类, Thread 是密封的话 BackgroundWorker 不是。

其他提示

中。净额4.5可以使用默.DefaultThreadCurrentCulture

我不认为你可以设置文化对于整个应用程序,但可以设置文化explicilty只要你创建的一个主线:

using System;
using System.Globalization;
using System.Threading;

class Program {

    static void thread_test() {
        Console.WriteLine("Culture: {0}", CultureInfo.CurrentCulture.DisplayName);
    }

    public static void Main(params string[] args) {
        Thread t = new Thread(thread_test);
        t.CurrentCulture = new CultureInfo("it-it");
        t.Start();
        t.Join();
    }
}

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top