2016-07-01 10 views
-2

Ich habe die Notwendigkeit, die Erstellung neuer Threads zu steuern, so dass sie immer einige Merkmale der Hauptthead haben. Um dies zu tun, verwende ich eine Klasse ThreadFactory, wo ich CurrentCulture und CurrentUICulture setze.Wie steuern oder initialisieren Sie untergeordnete Thread-Eigenschaften von übergeordneten?

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

Zum Beispiel, wenn ich einen neuen Thread erstellt werden soll es mit Current werden wird initiazed die Windows-Einstellungen entspricht, lassen Sie uns Englisch sagen. Falls ich den Haupt-Thread in Spanisch geändert habe, wird der neue Thread immer noch Englisch sein. Aufgrund dieses Verhaltens verwende ich immer den Thread auf diese Weise neue Themen zu erstellen: Die

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

tut Ich bin sicher, dass neue Themen werden immer mit der gleichen Kultur wie der Haupt-Thread gestartet und muß nicht geändert werden dies in jedem Thread-Code. Das Problem ist, dass ich gerne eine weitere Eigenschaft haben würde, die genauso funktioniert wie CurrentCulture. Ich habe versucht, ThreadStatic Attribut zu verwenden, aber es initialisiert auf einen Nullwert in dem unterordneten Thread. Und es als statische Eigenschaft zu verwenden, ist nicht möglich, weil ich es threadsicher für den Haupt-Thread brauche.

+1

Können Sie erklären, was Sie durch „eine weitere Eigenschaft, die bedeutet, dass die gleiche gearbeitet Weg?" Um Haare zu teilen, hat die Klasse keine Eigenschaften, so dass sie keine * mehr * Eigenschaft haben kann. (Es hat eine Methode.) Was verhindert das Hinzufügen einer anderen Methode? –

+0

Diese Frage ist unklar. Was "eine weitere Eigenschaft" willst du einstellen? Was _spezifisches_ Problem haben Sie versucht, es zu setzen? Was den Code betrifft, den du gezeigt hast, wenn du die Kulturwerte aus dem aktuellen Thread kopieren willst, a) setzt voraus, dass die Standardeinstellungen des aktuellen Threads geändert wurden (was gut, aber ungewöhnlich ist), und b) frage mich was Sie möchten in den neuen Threads Änderungen an den Kultureinstellungen des Hauptthreads vornehmen. Vielleicht ist letzteres für diese Frage nicht relevant (obwohl es nicht in der Lage ist, die Frage zu verstehen, es ist unmöglich zu wissen), aber es lohnt sich darüber nachzudenken. –

+0

Ich habe die Frage bearbeitet, um klarer zu sein. Was ich tun möchte, ist eine Eigenschaft des untergeordneten Threads verfügbar zu machen, so dass der Elternteil es ändern kann, wie ich es mit der CurrentCulture mache. – lmalpighi

Antwort

0

Ich hatte auch das gleiche vor langer Zeit Frage, dann ist dieses fand ich, alles, was Sie wollen in diesem Thread setzen können:

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(); 
} 
Verwandte Themen