概述
但是,在处理大量遗留代码时(并非所有代码都在您的控制之下),这是不可能实现的.因此,可以例如创建Thread och Threadpool的子类/包装器,并在执行委托之前设置所需的cultureinfo,或者可以要求委托本身包含一组文化. (难以验证并容易出现错误……)
看看TPL,更具体地说是PLINQ,但是我发现很难(如果不是不可能的话)以集中的方式改变文化环境.
在遗留代码中处理overriding thread / application-cultureinfo的任何建议?
谢谢!
我写了一个扩展名.为了那个原因:
public static class ParallelQueryCultureExtensions { public static ParallelQuery<TSource> SetCulture<TSource>(this ParallelQuery<TSource> source,CultureInfo cultureInfo) { SetCulture(cultureInfo); return source .Select( item => { SetCulture(cultureInfo); return item; }); } private static void SetCulture(CultureInfo cultureInfo) { if (Thread.CurrentThread.CurrentCulture != cultureInfo) { Thread.CurrentThread.CurrentCulture = cultureInfo; } } }
因此,如果您在使用.AsParallel()分割原始源之后使用它,您将得到您想要的.
CultureInfo kaCulture = CultureInfo.GetCultureInfo("ka-Ge"); int[] array = new int[100]; Random random = new Random(); int index =0; Array.ForEach(array,i => { array[index++] = index;}); array .AsParallel() .SetCulture(kaCulture) .ForAll( i => { Thread.Sleep(random.Next(5)); Console.WriteLine("Thread-{0} \t Culture-'{1}' \t Element-{2}",Thread.CurrentThread.ManagedThreadId,Thread.CurrentThread.CurrentCulture,i); }); Console.WriteLine("Press any key to quit"); Console.ReadKey();
总结
以上是编程之家为你收集整理的线程,CultureInfo .net,TPL,PLINQ全部内容,希望文章能够帮你解决线程,CultureInfo .net,TPL,PLINQ所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧