Нет, все нормально, если ты установил культуру в текущем потоке, значит она будет действительна для всех ф-ций данного потока. Значит при
Цитата(6atoh @ 4.5.2007, 19:46 ) | | при выходе из функции культура опять сбрасывается на первоначальную |
ты переходишь в другой поток. Проверь внимательно, поставь в функциях
| Код | Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
|
и посмотри, в одном ли потоке они выполняются? вот код для примера
| Код | class Program { delegate void Delegate();
static void Do() { Console.Write("DO "); Console.WriteLine(Thread.CurrentThread.CurrentCulture); Console.WriteLine(Thread.CurrentThread.ManagedThreadId); }
static void Main(string[] args) { Console.Write("Main "); Console.WriteLine(Thread.CurrentThread.CurrentCulture); Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
CultureInfo ci = new CultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = ci; Console.Write("Main "); Console.WriteLine(Thread.CurrentThread.CurrentCulture); F1(); F2(); Console.Write("Main "); Console.WriteLine(Thread.CurrentThread.CurrentCulture); Console.ReadLine();
Delegate del = new Delegate(Do); del.BeginInvoke(CallBack, del); Console.Write("Main "); Console.WriteLine(Thread.CurrentThread.CurrentCulture); Console.WriteLine(Thread.CurrentThread.ManagedThreadId); Console.ReadLine(); }
static void CallBack(IAsyncResult ar) { Console.Write("CallBack "); Delegate del = ar.AsyncState as Delegate; del.EndInvoke(ar); Console.WriteLine(Thread.CurrentThread.CurrentCulture); Console.WriteLine(Thread.CurrentThread.ManagedThreadId); Console.ReadLine(); }
static void F1() { Console.Write("F1 "); Console.WriteLine(Thread.CurrentThread.CurrentCulture); Console.WriteLine(Thread.CurrentThread.ManagedThreadId); }
static void F2() { Console.Write("F2 "); Console.WriteLine(Thread.CurrentThread.CurrentCulture); Console.WriteLine(Thread.CurrentThread.ManagedThreadId); } }
|
Как ты видишь, Main, F1 и F2 выполняются в одном потоке, а Do и CallBack - в другом |