C# countdown-timer
Ich versuche, mich ein countdown mit C# und zeigt die Zeit im format:
hour:minutes:seconds
Habe ich versucht, dieses:
var minutes = 3; //countdown time
var start = DateTime.Now;
var end = DateTime.Now.AddMinutes(minutes);
Thread.Sleep(1800);
if (??) //I tried DateTime.Now > end not works
{
//... show time
label1.Text = "...";
}
else
{
//done
label1.Text = "Done!";
}
Verschiedene Möglichkeiten, dieses problem zu lösen, erschien auch. Vielen Dank im Voraus
Wenn Sie möchten, aktualisieren Sie regelmäßig das Etikett, müssen Sie etwas wie eine Schleife.
Ich er es Tat, hätte ich meine Zweifel über seine Vernunft. Dies ist Winforms und .net ist völlig in Ordnung, Mechanismen für den Umgang mit solchen Sachen. Keine Notwendigkeit zu bringen, die in javascript für so ein kleines Ding.
Ich er es Tat, hätte ich meine Zweifel über seine Vernunft. Dies ist Winforms und .net ist völlig in Ordnung, Mechanismen für den Umgang mit solchen Sachen. Keine Notwendigkeit zu bringen, die in javascript für so ein kleines Ding.
InformationsquelleAutor The Mask | 2011-11-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht verwenden
Thread.Sleep
hier.Thread.Sleep
auf den UI-thread blockiert die UI, und in einem anderen thread führt zu einer zusätzlichen Komplexität durch die thread-Synchronisation.Wenn Sie C# 5 oder die async CTP können Sie wahrscheinlich code schreiben, der sehr ähnlich zu dem, was Sie Tat, da Sie dann eine Fortsetzung äquivalents von
Thread.Sleep
, die nicht blockiert die Benutzeroberfläche.In standard-C# 4 ich würde verwenden eine
System.Windows.Formen.Timer
.Um den countdown zu starten:
In der timer-handler schreiben Sie:
Für andere Formatierungsoptionen finden Sie unter Standard-TimeSpan-Format-Strings.
Einer Frage, die bleibt, mit diesem code ist, dass es nicht korrekt funktioniert, wenn die system-Uhr-änderungen.
Bei der Verwendung
DateTime.Now
stattDateTime.UtcNow
es wird auch brechen beim Wechsel von/auf Sommerzeit oder die änderung der Zeitzone. Da möchte man zu identifizieren, die einem bestimmten Punkt in der Zeit (und nicht die display-Zeit) sollten Sie die UTC-Zeit anstelle der lokalen Zeit.Error:Operator '<' cannot be applied to operands of type 'System.TimeSpan' and 'int'
wie ich das Problem beheben?Verwenden
TimeSpan.Zero
statt0
CodeInChaos:der Kerl, Der die Dinge wirklich funktionieren. Funktioniert perfekt. Dank sehr viel. 🙂
+1 für den funktionierenden code. Eine kurze Frage wenn, Sie erwähnt nicht zu benutzen, Jetzt, verwenden Sie stattdessen UtcNow. Ich habe es mit beiden Optionen, und es funktioniert gut in beide Richtungen. Irgendein besonderer Grund, warum Sie lieber UtcNow Jetzt vorbei?
In meinem letzten Absatz schon Adressen. Wenn Ihr code ausgeführt wird, wenn der Sommerzeit-Schalter on/off
DateTime.Now
springen von einer Stunde. Und dann gibt es die eher philosophischen Grund, dass ich denke, dass das design vonDateTime
ist nicht sehr gut bei der Arbeit mit lokalen Zeiten, so dass ich vermeiden Sie, Wann immer möglich.InformationsquelleAutor CodesInChaos
Ich würde verwenden Sie einen timer, so etwas wie dieses. Zuerst ein paar Instanz-Variablen.
und im Konstruktor oder load-Ereignis
und schließlich die event-handler
InformationsquelleAutor Jonas Elfström
Dein code setzt die Variablen dann schlafen geht für 3 Minuten, so dass die if-Anweisung nicht ausgeführt wird, bis es verlässt den Energiesparmodus. Entweder einen neuen thread zum update der UI oder so etwas...
Mit einem 2. thread kann man noch tun, Sachen in Ihrem Programm, während es funktioniert. "Fertig!" erscheint, sobald es fertig ist.
Thread.Sleep()
. Mit Schlaf ist eine Verschwendung von einem Thema.Genial vielen Dank, ich bin kein C# - Kerl am Herzen und war einfach aus seinem code.
Sie haben Timer in Java 🙂
Ich bin ein C-Typ :p
Budgetierung deines threads ist eine gute Praxis, aber nicht Bedingung. Der große Nachteil ist das sperren der Benutzeroberfläche wenn die Benutzeroberfläche verwendet wird.
InformationsquelleAutor Grambot
Können Sie auch ein Timer, als würde dieser sich um alle Probleme wie UI-Verriegelung.
Sie können die
System.Windows.Forms.Timer
-Timer. In der MSDN-Bibliothek finden Sie Beispiele für den Einsatz von it.WinForms-Timer Griffe auch der Aufruf über den Timer-thread und den UI-thread.
- SeriTools
InformationsquelleAutor seri