C# + Timer mit Win2k und WinXP

Hallo,

ich habe ein Programm in dem ich mehrere Timer bzw. einen Timer in je einer Instanz einer Klasse aufrufe. Die Timer sollen 3 mal ablaufen und dann beendet werden. Insgesamt gibt es 6 Instanzen dieser Klasse.

Bei Win2k funktioniert das einwandfrei.

Bei WinXP kommt es zu folgendem Fehler:

-Alle Timer werden gestartet.
-Alle Timer laufen einmal ab. (soweit ok)

-Bei 2ten Ablauf der Timer laufen irgendwie nur noch 2 Timer ab
-genau die selben 2 Timer laufen auch beim 3ten elapsed ab. (Es handelt sich um die letzten beiden Timer)
-Die restlichen Timer kommen nicht mehr in das elapsed event.

Woran kann das liegen?
Gibt es hier Unterschiede zwischen Win2k und WinXP?

Vielen Dank

Hi!

Welche Timer (System.Windows.Forms.Timer, System.Threading.Timer oder System.Timers.Timer) verwendest Du denn für welche Art von Anwendung (WinForms, Dienst, …)?

Kann es sein, dass Du vielleicht mit dem Threading Probleme hast und evtl. aus einem Timer-Thread heraus das GUI aktualisierst ohne Invoke()/BeginInvoke() ? Da treten die seltsamsten Effekte auf…

Gruß,
Martin

Hallo,

danke für die Antwort.

Ich benutze System.Timers.Timer.
Es handelt sich um eine normale Windows Forms Anwendung.

Ich rufe die Timer alle im selben Thread auf bzw. ich generiere keine weiteren Threads in meiner Anwendung.
Ich habe lediglich mehrere Instanzen der klasse, in der jeweils der Timer gestartet/behandelt wird.

„BeginInvoke“ benutze ich nicht. Sagt mir momentan auch nichts.

Danke

Hallo,

danke für die Antwort.

Ich benutze System.Timers.Timer.

Aha!

Es handelt sich um eine normale Windows Forms Anwendung.

Ich rufe die Timer alle im selben Thread auf bzw. ich
generiere keine weiteren Threads in meiner Anwendung.
Ich habe lediglich mehrere Instanzen der klasse, in der
jeweils der Timer gestartet/behandelt wird.

Wenn Du Systems.Timers.Timer verwendest, dann wird das Elapsed-Event aus einem anderen Thread heraus ausgelöst!
Wenn Du dann im Eventhandler irgendwas mit den Controls Deiner Anwendung machst, gibt’s Probleme.
Nimm System.Windows.Forms.Timer, da kommt das Tick-Event im selben (GUI-)Thread.

„BeginInvoke“ benutze ich nicht. Sagt mir momentan auch
nichts.

Oh oh, Wissenslücke! Ich empfehle dringend diesbezüglich nachzulesen.
Der Zugriff auf UI-Elemente aus einem anderen Thread heraus ist eine der „Todsünden“ bei Windows-Programmierung; mit Invoke() oder BeginInvoke() kann ein Methodenaufruf in den UI-Thread gemarshallt werden.

Danke

Gruß,
Martin