ich habe schon häufiger den System.Windows.Forms.Timer() eingesetzt und er hat immer funktioniert. Nun habe ich eine Form in einem neuen Thread gestartet (ein Statusbalken) und möchte, dass in diesem Form der Timer läuft. Wie gesagt, die ganze Form wird in einem neuen Thread instanziiert. Der Timer, der darin instanziiert und gestartet wird, scheint jedoch darin keinen Event auszulösen, „timer_Tick(System.EventArgs)“ wird nicht aufgerufen.
ich habe schon häufiger den System.Windows.Forms.Timer()
eingesetzt und er hat immer funktioniert. Nun habe ich eine
Form in einem neuen Thread gestartet (ein Statusbalken) und
möchte, dass in diesem Form der Timer läuft. Wie gesagt, die
ganze Form wird in einem neuen Thread instanziiert. Der Timer,
der darin instanziiert und gestartet wird, scheint jedoch
darin keinen Event auszulösen, „timer_Tick(System.EventArgs)“
wird nicht aufgerufen.
Vielen Dank, da steht, dass der Windows.Forms-Timer (den ich benutzt hatte) immer nur im primären Thread ausgeführt wird. Ich werde es nun also mal mit dem System.Timers-Timer versuchen…
Hi!
Wie Du ja schon selbst festgestellt hast, ist der System.Windows.Forms.Timer dafür nicht geeignet. Dieser Timer verwendet nämlich die Nachrichten-Queue des Threads, in dem das GUI läuft.
Mit System.Timers.Timer wirst Du mehr Erfolg haben, aber eine Warnung hierbei: Denk’ unbedingt daran, dass Dein GUI nicht von außerhalb des Threads aktualisiert werden darf, der die Controls auch angelegt hat.
Im Elapsed-Event dieses Timers bist Du in einem anderen Thread, Du musst dort also mit Invoke oder BeginInvoke arbeiten, um Dein GUI zu aktualisieren.
Wird häufig vergessen, weil es anfangs durchaus gut gehen kann, wenn man es falsch macht. Aber irgendwann rächt es sich garantiert…
Gruß,
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]