6
votes

Alternative à chronomètre?

Je travaille sur un chronomètre très simple à l'aide de WPF, mais à l'aide du chronomètre 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.

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> xxx pré>

le thread de mise à jour: p>

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";
    }
}


14 commentaires

Qu'est-ce que vous utilisiez chronomètre 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 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 chronomètre ?


Maintenant, vous êtes stupide. La classe chronomètre 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 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


3 Réponses :


2
votes

Vous devez introduire une variable supplémentaire Timespan Heure accumulée Code> dans laquelle vous enregistrez l'intervalle écoulé chaque fois que quelqu'un clique sur STOP.

et: p>

iTimer.Content = (new DateTime((DateTime.Now - _started).Ticks) + accumulatedTime).ToString("HH:mm:ss");


1 commentaires

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");



1
votes

Utiliser system.timers.timer

Vous pouvez démarrer et arrêter cela et définir un compteur dans l'événement Tick TIMERS.

Ceci est un exemple simple: < / p> xxx

xaml: xxx


3 commentaires

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.



0
votes

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


1 commentaires

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.