是否有可能设定为默。网应用程序或者只是一线?
-
19-09-2019 - |
题
我应用程序中没有GUI或UI,而是将写入文件,分析由其他应用程序(在XML和其他人)。
我有个客户,其默有NumberDecimalSeparator设置一个逗号,这会导致分析错误与浮点数(PI会结束了 3,1415).
我想的一种方式设置默全球应用程序内,对于所有的螺纹。我已经试过:
- 在(显然)习惯做法的设定 CurrentThread.CurrentCulture 作为第一线 主() 但它似乎得到重置。
- 一个变化/膨胀上 http://www.codeproject.com/KB/cs/Change_App_Culture.aspx
- 这样做(#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");