C# de compte à rebours
Je suis en train de faire un compte à rebours à l'aide de C# et afficher l'heure en format:
hour:minutes:seconds
J'ai essayé ceci:
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!";
}
Différentes façons de résoudre ce problème est également apparu. Merci d'avance
Si vous voulez mettre à jour périodiquement l'étiquette, vous aurez besoin de quelque chose comme une boucle.
Je il l'a fait, j'aurais mes doutes sur sa santé mentale. C'est Winforms, et .net a parfaitement bien les mécanismes permettant de gérer ce genre de trucs. Pas besoin de mettre en javascript pour si peu de chose.
Je il l'a fait, j'aurais mes doutes sur sa santé mentale. C'est Winforms, et .net a parfaitement bien les mécanismes permettant de gérer ce genre de trucs. Pas besoin de mettre en javascript pour si peu de chose.
OriginalL'auteur The Mask | 2011-11-01
Vous devez vous connecter pour publier un commentaire.
Vous ne devez pas utiliser
Thread.Sleep
ici.Thread.Sleep
sur le thread d'INTERFACE utilisateur bloque l'INTERFACE utilisateur, et de l'utiliser sur un autre thread conduit à une complexité supplémentaire en raison de la synchronisation des threads.Si vous avez le C# 5 ou async CTP probablement, vous pouvez écrire du code très similaire à ce que vous avez fait, puisque vous obtenez alors une poursuite fondée équivalent de
Thread.Sleep
que ne pas bloquer l'INTERFACE utilisateur.Dans la norme C# 4 j'aimerais utiliser un
System.De Windows.Les formulaires.Timer
.Pour démarrer le compte à rebours:
Dans le timer gestionnaire vous écrivez:
Pour d'autres options de mise en forme voir Standard Plage De Temps, Les Chaînes De Format.
Une question qui reste avec ce code c'est qu'il ne fonctionnera pas correctement si le système de modifications de l'horloge.
Lors de l'utilisation de
DateTime.Now
au lieu deDateTime.UtcNow
il sera également pause lors de la commutation à partir de/à l'heure d'été ou la modification du fuseau horaire. Puisque vous voulez identifier un certain point dans le temps (et pas un affichage de l'heure), vous devez utiliser UTC au lieu de l'heure locale.Error:Operator '<' cannot be applied to operands of type 'System.TimeSpan' and 'int'
comment le réparer?Utilisation
TimeSpan.Zero
au lieu de0
CodeInChaos:Le gars que les choses fonctionnent vraiment. Fonctionne parfaitement. Merci beaucoup. 🙂
+1 pour le code de travail. Une petite question cependant, vous l'avez mentionné, de ne pas l'utiliser Maintenant, au lieu d'utiliser UtcNow. J'ai vérifié avec les deux options, et il fonctionne bien dans les deux sens. Une raison pourquoi vous préférez UtcNow plus Maintenant?
Mon dernier paragraphe déjà adresses. Si votre code est en cours d'exécution lorsque l'heure d'été à interrupteurs on/off
DateTime.Now
permettra de sauter d'une heure. Et puis il y a le plus de raison philosophique que je pense que la conception deDateTime
n'est pas très bon quand on travaille avec l'heure locale, donc j'évite autant que possible.OriginalL'auteur CodesInChaos
Je voudrais utiliser une minuterie quelque chose comme ça. D'abord un couple de variables d'instance.
et dans le constructeur ou l'événement load
et puis, enfin, le gestionnaire d'événement
OriginalL'auteur Jonas Elfström
Votre code définit les variables, alors va dormir pendant 3 minutes pour que le si l'instruction n'est pas exécutée jusqu'à ce qu'il quitte l'état de veille. Soit de créer un nouveau thread pour mettre à jour l'INTERFACE utilisateur ou de faire quelque chose comme ça...
Avec un 2ème fil, vous pouvez toujours faire des trucs dans votre programme pendant qu'il fonctionne. "Bien fait!" apparaîtra une fois celle-ci terminée.
Thread.Sleep()
. En utilisant le sommeil est une perte d'un thread.Génial merci, je ne suis pas un C# mec à cœur et c'était juste la construction de son code.
Ils ont des minuteries en Java 🙂
Je suis un C gars :p
La budgétisation votre fils est une bonne pratique mais pas une exigence. Le principal inconvénient est de verrouiller l'INTERFACE utilisateur si l'INTERFACE utilisateur est utilisé.
OriginalL'auteur Grambot
Vous pouvez également utiliser un Minuterie, ce qui permettrait de traiter tous les problèmes comme INTERFACE de verrouillage.
Vous pouvez utiliser le
System.Windows.Forms.Timer
-Timer. Dans la bibliothèque MSDN, vous pouvez trouver des échantillons de l'utilisation de l'informatique.Les WinForms-Timer poignées aussi l'avoir en travers de la Minuterie-fil et de l'UI thread.
- SeriTools
OriginalL'auteur seri