2016-07-01 2 views
-2

У меня есть необходимость контролировать создание новых потоков, поэтому у них всегда есть некоторые caracteriscs из главного теада. Для этого я использую класс ThreadFactory, где я устанавливаю CurrentCulture и CurrentUICulture.Как контролировать или инициализировать свойства дочерних потоков от родителя?

public static class ThreadFactory { 
    public static Thread Create(ThreadStart start) { 
     var thread = new Thread(start); 
     thread.CurrentCulture = CultureInfo.CurrentCulture; 
     thread.CurrentUICulture = CultureInfo.CurrentUICulture; 
     return thread; 
    } 
} 

Например, если я хочу, чтобы создать новый поток он собирается быть initiazed с CurrentCulture равна настройки окна, скажем, английский. В случае, если я изменил основной поток на испанский, новый поток по-прежнему будет английский. Из-за такого поведения я всегда использую ThreadFactory создавать новые темы так:

Thread t1 = ThreadFactory.Create(() => { 
    //Thread code 
}); 
t1.start(); 

Делая это, я уверен, что новые потоки всегда начинались с одной и той же культуры, что и основной поток и не нужно менять это в каждом коде потока. Проблема в том, что я хотел бы иметь еще одно свойство, которое работает так же, как CurrentCulture. Я попытался использовать атрибут ThreadStatic, но он инициализирует нулевое значение в дочернем потоке. И использовать его как статическое свойство невозможно, потому что мне нужно, чтобы он был потокобезопасным для основного потока.

+1

Можете ли вы уточнить, что вы подразумеваете под «еще одним свойством, что работал тот же путь?" Чтобы разделить волосы, класс не имеет свойств, поэтому он не может иметь одно свойство * more *. (У него есть метод.) Что мешает добавить другой метод? –

+0

Этот вопрос непонятен. Какое «еще одно свойство» вы пытаетесь установить? Какую специфическую проблему вы пытаетесь установить? Что касается кода, который вы указали, если вы хотите скопировать значения культуры из текущего потока, то a) предполагает, что настройки по умолчанию текущего потока были изменены (это нормально, но необычно), и b) заставляет меня задаться вопросом, что вы хотите сделать в новых потоках, если изменились настройки культуры основного потока. Может быть, последнее не относится к этому вопросу (хотя и не в состоянии понять вопрос, это невозможно узнать), но об этом стоит подумать. –

+0

Я отредактировал вопрос, чтобы быть более понятным. Я хочу показать свойство дочернего потока, чтобы родитель мог его изменить, например, с CurrentCulture. – lmalpighi

ответ

0

Я также имел тот же вопрос уже давно, то я нашел это, вы можете положить все, что вы хотите в этой теме:

private static void CreateThread() 
{ 
    var currentCulture = Thread.CurrentThread.CurrentCulture; 
    var currentUICulture = Thread.CurrentThread.CurrentUICulture; 
    var thread = new Thread(() => 
    { 
    Thread.CurrentThread.CurrentCulture = currentCulture; 
    Thread.CurrentThread.CurrentUICulture = currentUICulture; 

    // Do something here, example: 
    Thread.Sleep(5000); 

    }) {IsBackground = true}; 
    thread.Start(); 
} 
Смежные вопросы