2016-07-01 10 views
-2

私は新しいスレッドの作成を制御する必要があるので、常にメインスレッドのいくつかの機能を持っています。これを行うために、CurrentCultureとCurrentUICultureを設定するクラスThreadFactoryを使用しています。親から子スレッドのプロパティを制御または初期化する方法は?

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; 
    } 
} 

は、例えば、私はのCurrentCultureでinitiazedされようとしている新しいスレッドを作成したい場合は、Windowsの設定に等しい、のは英語としましょう。メインスレッドをスペイン語に変更した場合、新しいスレッドはまだ英語になります。

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

これをやって、私は新しいスレッドは常にメインスレッドと同じ文化で開始されていることを確信しているし、変更する必要はありません。この動作の私は常に新しいスレッドをこのように作成するThreadFactoryを使用しているためこれはすべてのスレッドコードで行われます。 問題は、CurrentCultureと同じように機能するプロパティをもう1つ持っていたいということです。 ThreadStatic属性を使用しようとしましたが、子スレッドのnull値に初期化されます。それを静的なプロパティとして使用することは不可能です。なぜなら、スレッドをメインスレッドに対してスレッドセーフにする必要があるからです。

+1

をあなたが同じことを働いた「もう一つのプロパティで何を意味するのか明確にすることができ方法?"ヘアを分割するために、クラスはプロパティを持たないので、* more *プロパティを持つことはできません。 (メソッドがあります)他のメソッドを追加できないのはなぜですか? –

+0

この質問は不明です。あなたが設定しようとしている「もう一つの特性」は何ですか? _specific_問題は何を設定しようとしていますか?あなたが示したコードでは、現在のスレッドのカルチャ値をコピーする場合は、a)現在のスレッドのデフォルト設定が変更されていると仮定します(これは問題ありません)。メインスレッドのカルチャ設定が変更された場合は、新しいスレッドで実行します。後者はこの質問には関係しないかもしれません(質問は理解できませんが、知ることは不可能ですが)。考えてみる価値はあります。 –

+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(); 
} 
関連する問題