PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu C# Timer


anakin87
2009-06-17, 13:33:15
hey leute,
hab gerade ein Programm geschrieben indem ich Timer verwende.
Nur jetzt bin ich gerade draufgekommen dass der Timer zwar ganz nett ist, aber
es wär besser ich könnte die verbleibende Restzeit anzeigen bis der Timer das Elapsed-Event auslöst...
Weil es wär irgendwie blöd für das Anzeigen der verbliebenen Zeit einen eigenen Timer zu schreiben der jede Sekunde vom Initialisierungewert 1 subtrahiert... ;D
hat wer ne Idee? oder kann das die Timer-Klasse nicht?

beste Grüße

Monger
2009-06-17, 13:44:25
Du verwendest den System.Threading.Timer , richtig?

Du willst ja aber offensichtlich etwas anzeigen, vermutlich mal auf einer Oberfläche. Schon über den Windows.Forms.Timer nachgedacht?

Der hat nämlich ein Tick Event, so dass du bei jedem Tick auch die Oberfläche aktualisieren kannst um z.B. die Restzeit anzuzeigen. Das hat der Threading.Timer nicht, weil der eigentlich nicht für solche Zwecke gedacht ist.

anakin87
2009-06-17, 14:18:37
also ich verwendt <<system.timers.timer xyz>>
was die forms haben auch nen eigenen timer... gleich mal testen..
EDIT:
naja das tick-event is ja das gleiche wie bei dem anderen timer das elapsed, aber du hast mich auf ne idee gebracht
ich könnt das intervall auf 1sek stellen und dann den timer erst nach X-mal abdrehen um auf die gesamtzeit zu kommen, sollt eigentlich funken ?!?!?

Monger
2009-06-17, 15:19:56
ich könnt das intervall auf 1sek stellen und dann den timer erst nach X-mal abdrehen um auf die gesamtzeit zu kommen, sollt eigentlich funken ?!?!?
Das wäre eine Möglichkeit, ja. Du wirst feststellen, dass das nicht unbedingt ganz präzise ist, weil das Auslösen des Events und das Verarbeiten des Codes ja ein bißchen Zeit braucht. Das kann zu leichten Fehlern führen, die sich bei jedem Durchlauf aufsummieren.

Wenn du es präziser haben willst, dann bildest du bei jedem Tick die Differenz zur Zielzeit, und gibst diese aus.

Das kann sinngemäß so aussehen:

DateTime JetztZeit = DateTime.Now();
DateTime ZielZeit = JetztZeit.AddSeconds(25); // Stoppuhr soll 25 Sekunden laufen

// ab hier im Tick Event
TimeSpan AktuelleDifferenz = ZielZeit.Subtract(DateTime.Now());

if(AktuelleDifferenz <= TimeSpan.FromSeconds(0)){
// tu irgendwas
}