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?
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!"
System.Threading.Timer arbeitet mit Threads aus dem ThreadPool. Diesen kannst du auch ein andere Culture verpassen.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...