Ich würde mich nicht darauf verlassen.
Ich denk da zum Beispiel an den BackgroundWorker, der erbt die Culture _nicht_ vom generierenden Thread.
D.H. ein generierter Thread muss nicht unbedingt die selbe Culture haben wie die Haupt Applikation.
Ich empfehle das setzen der Culture in eine Methode auslagern (oder ein Property) welches dann immer ein event Absetzt.
C# Code:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
public CultureInfo CurrentCulture
{
get { return Thread.CurrentThread.CurrentCulture; }
set
{
Thread.CurrentThread.CurrentCulture = value;
Thread.CurrentThread.CurrentUICulture = value;
OnCurrentCultureChanged();
}
}
C# Code:
1 2 3 4 5 6 7 8 9 10
public CultureInfo CurrentCulture
{
get { return Thread.CurrentThread.CurrentCulture; }
set
{
Thread.CurrentThread.CurrentCulture = value;
Thread.CurrentThread.CurrentUICulture = value;
OnCurrentCultureChanged();
}
}
C# Code:
1 2 3 4 5 6 7 8 9 10
public CultureInfo CurrentCulture
{
get { return Thread.CurrentThread.CurrentCulture; }
set
{
Thread.CurrentThread.CurrentCulture = value;
Thread.CurrentThread.CurrentUICulture = value;
OnCurrentCultureChanged();
}
}
Danke,
ist im Prinzip beides möglich, hat aber auch beides seine Haken:
Zur Lösung von looser:
In "Thread_Event()" müsste natürlich der richtige Thread übwewacht werden. "Thread.CurrentThread" ist in diesem Kontext ja schon wieder ein anderer, nämlich der "Überwachungs-Thread" selber. Wäre aber einfach machbar, allerdings gibt es auch immer eine Zeitspanne, die von der Tatsächlichen Änderung bis zum Event vergeht. Außerdem wird das event in einem eigenen Thread ausgelöst, was ebenfalls zu Problemen führen kann (Stichwort Controls manipulieren, neu Zeichnen...). Trotzdem kann ich mit dieser Lösung evtl. etwas anfangen.
Zur Lösung von CSL:
Klar, funktioniert natürlich, solange ich eine Anwendung programmiere, und die CurrentCulture immer über dieses Property setzte. In diesem Fall habe ich ja sowieso selber die Finger drauf, die CurrentCulture ändert sich ja nicht einfach so, sondern wird vom Entwickler gesetzt. Problematisch wird es, wenn ich eine Bibliothek entwickle, welche von Dritten benutzt wird. Dann habe ich absolut keine Garantie, dass der Benutzer meiner Bibliothek das Property wirklich verwendet...
Also nochmals vielen Dank, habt mir beide ein Stückchen weiter geholfen!
Klar, möglich ist ja auch immer jede Culture, kann man ja schlecht (und will man ja auch nicht) verbieten.
Aber als einfaches Beispiel:
Wenn ich zum Beispiel ein Control erstelle, das ja nach eingestellter Culture im GUI Thread eine Landesflagge anzeigen soll. Dann wäre es doch hilfreich wenn ich mitbekomme dass sich die Culture geändert hat und ich eine andere Flagge anzeigen muss. Natürlich geht die Welt nicht unter, wenn ich es an einer solchen Stelle nicht mitbekomme, und es ist ja trotzdem jede andere Culture erlaubt.
Mein Problem ist (bzw. war, hat sich fast komplett selbst gelöst):
Ich greife über Platform Invokes auf C++ klassen zu, die eine eigene Lokalisierung mitbrignen. Wenn ich jetzt beispielsweise einen "Double-String" von der C++ Klasse bekomme, die gerade eine Englische Kultur verwendet, und ich würde im managed Code mit Deutscher Kultur daraus wieder ein Double machen, hätte das ziemlich fatale Folgen...
Da die Lokalisierung der C++ Klasse aber über Umwege (gut versteckt) doch überschrieben werden kann, habe ich sie einfach über Callbacks auf die Thread.CurrentCulture.XXX (z.B DecimalPoint) umgeleitet. So wird jetzt automatisch immer, egal in welchem Thread, die gleiche Kultur wie im Managed Code verwendet.
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.