Je travaille sur un chronomètre très simple à l'aide de WPF, mais à l'aide du chronomètre J'ai fait une certaine recherche sur le chronomètre étant lent, a trouvé de nombreux résultats, mais aucune solution à cela, j'ai donc décidé de trouver mon propre compteur. P> Voici un échantillon de Ce que je suis venu avec: p> le thread de mise à jour: p> System.Diagnostics code> est très lent et non fiable du tout, par rapport à mon horloge système toutes les 1 seconde de mon application était de 3 secondes. sur une horloge réelle.
private void bReset_Click(object sender, RoutedEventArgs e)
{
isRunning = false;
iTimer.Content = "00:00:00";
bToggle.Content = "Start";
}
private void bToggle_Click(object sender, RoutedEventArgs e)
{
if ((string)bToggle.Content == "Start")
{
isRunning = true;
_started = DateTime.Now;
bToggle.Content = "Stop";
}
else if ((string)bToggle.Content == "Resume")
{
isRunning = true;
bToggle.Content = "Stop";
}
else
{
isRunning = false;
bToggle.Content = "Resume";
}
}
3 Réponses :
Vous devez introduire une variable supplémentaire et: p> Timespan Heure accumulée Code> dans laquelle vous enregistrez l'intervalle écoulé chaque fois que quelqu'un clique sur STOP.
iTimer.Content = (new DateTime((DateTime.Now - _started).Ticks) + accumulatedTime).ToString("HH:mm:ss");
Très apprécié, je l'ai résolu avec le suivant: Nouvelle dateTime ((DateTime.now.Subrent (accumulée) - _tempo) .Tostring) .tostring ("HH: mm: ss"); code>
Utiliser Vous pouvez démarrer et arrêter cela et définir un compteur dans l'événement Tick TIMERS. P> Ceci est un exemple simple: < / p> xaml: p> system.timers.timer code>
le fait que j'utilise un thread est de sorte qu'il ne pend pas mon application ui
Cela ne verrouille pas votre UI, mais si vous voulez être en sécurité, mettez la minuterie dans un travailleur d'arrière-plan et transmettez l'événement de tick à l'événement de progressisation des travailleurs
JRB Si vous déplacez constamment la fenêtre de l'application.
Je pense que cette ligne est votre problème:
_update = new System.Windows.Threading.DispatcherTimer(new TimeSpan(0, 0, 0, 0, 1), System.Windows.Threading.DispatcherPriority.Normal
Avec le code dans ma question, il se met à jour juste, mais à l'aide de la classe de chronomètre, ce n'était pas le cas de cette ligne comme étant le problème à mon avis.
Qu'est-ce que vous utilisiez
chronomètre code> pour?
Pour un stopwatcher? Pour le mettre, il comporte de 0 jusqu'à ce que vous arrêtez ou réinitialisez.
Cela semble juste comme si vous essayiez de l'utiliser comme une minuterie.
Quelque chose comme ça Sport-Impianti.com/wp-content/gallery /atletica/4103.jpg mais comme application de bureau. Quoi qu'il en soit, si vous regardez le code ci-dessus, il fonctionne complètement, j'ai juste besoin de déterminer comment faire la fonction d'arrêt / de reprise ou s'il existe un meilleur moyen de le contrôler.
Chronomètre Code> a des problèmes sur du matériel (par exemple, des compensations constantes entre cœurs), mais je n'ai jamais entendu parler d'une erreur multiplicative. Pouvez-vous publier votre code code> chronomètre code>?
Maintenant, vous êtes stupide. La classe
chronomètre code> est destinée à compter les différences de temps. Les minuteries sont destinées à exécuter des morceaux de code sur un calendrier. Ce n'est pas clair ce que vous essayez de faire.
CodeInchaos Je voudrais mais je me suis déjà roulée et je me suis déplacé vers l'un après plusieurs essais et aucun résultat utile des recherches.
Oded lol man, je fais un en.wikipedia.org/wiki/stopwatch Ceci mon son Confusion Comme j'essayais d'utiliser la classe de chronomètre pour faire un chronomètre, mais c'est ce que je fais un chronomètre pour le bureau pouvant être arrêté et repris.
Encore une fois, on dirait que vous avez besoin d'une minuterie. Les minuteries peuvent être arrêtées et reprises.
J'ai récemment écrit une chronomètre / horloge / compte à rebours dans WPF à utiliser à l'arrière d'une église pour aider l'orateur à savoir combien de temps ils prêchent. Vous êtes bienvenu au code si vous le souhaitez.
@Oded C'est pourquoi je cherchais une alternative ou une solution à mon code actuel, mais la classe des minuteries pend MyI.
@Guapo - Il y a plusieurs classes de minuterie différentes i> différentes. Vous devez utiliser le bon et votre interface utilisateur ne sera pas suspendu.
@Guapo: Pour choisir la bonne minuterie, vous pouvez peut-être jeter un oeil à Cet article .
@Oliver qui était très utile merci