Laden...

[erledigt] Lokalisierung: CurrentUICulture auch in Threads gültig?

Erstellt von BrainBug22 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.051 Views
B
BrainBug22 Themenstarter:in
51 Beiträge seit 2008
vor 14 Jahren
[erledigt] Lokalisierung: CurrentUICulture auch in Threads gültig?

Hallo ich habe folgendes Phänomen:

Ich programmiere gerade ein Projekt für das es 2 Resourcen-Dateien gibt, Resource.resx für englisch und Resource.de-DE.resx für deutsch.

Diese Resourcen enthalten sowohl Form-Control Texte als auch Strings.

Bei Programmstart setze ich die zu verwendende Sprache mit

Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language, false);

wobei ich language aus einer Settings-Datei lese um jede Sprache unabhängig von der BS-Sprache verwenden zu können.

Außerdem verwende ich einen Timer, der regelmäßig ein Label mit einem der Texte aus den Resourcen beschreibt.

Wenn ich das Programm jetzt auf einem deutschen Windows mit der englischen Einstellung starte, werden alle UI-Elemente richtig in englisch dargestellt, jedoch der Timer schreibt immer die deutschen Texte ins Label.

Beim Debuggen stellte sich heraus, das die CurrentUICulture bei einem Breakpoint in Timer_Elapsed auf deutsch steht und sonst immer auf englisch.

Meine Vermutung ist, dass für Timer_elapsed ein separater Thread erstellt wird, der die CurrentUICulture nicht übernimmt.

Ist dies so? Und wie löst man dieses Problem am besten?

6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

wenn du die Timer-Komponente von WinForms verwendet läuft dieser Timer im selben Thread wie die UI und somit ist die Culture auch für den Timer vorhanden.

Wird allerdings ein Timer aus System.Threading verwendet - der Timer läuft in einem eigenen Thread - dann kann dieser Thread die Culture nicht kennen da du im Code nur dem aktuellen Thread (CurrentThread) die andere Culture zuweist. Ich vermute du verwendest diesen da sonst das Problem nicht da wäre und der WinForm-Timer kein Elapsed-Ereignis hat.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.971 Beiträge seit 2006
vor 14 Jahren

System.Threading.Timer arbeitet mit Threads aus dem ThreadPool. Diesen kannst du auch ein andere Culture verpassen.

Locale of ThreadPool's Thread

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

B
BrainBug22 Themenstarter:in
51 Beiträge seit 2008
vor 14 Jahren

Ja ich verwende den System.Threading.Timer.

Danke für die Hilfe!