10
votes

Intervalle de minuterie 1000! = 1 seconde?

J'ai une étiquette qui devrait montrer les secondes de ma minuterie (ou dans un autre mot, j'ai une variable à laquelle est ajouté 1 chaque intervalle de la minuterie). L'intervalle de ma minuterie est défini sur 1000, de sorte que l'étiquette doit se mettre à jour chaque seconde (et doit également montrer les secondes). Mais l'étiquette est après 1 seconde déjà dans les centaines. Quel est un intervalle approprié pour obtenir 1 seconde? XXX


9 commentaires

Pouvez-vous envoyer votre code? Et que signifie "L'étiquette est déjà dans des centaines"?


@Default en ce moment - Nulle part


@nos je voudrais montrer les secondes que la minuterie est en cours d'exécution. Mais cela montre +25 - 30 chaque seconde.


Exécutez-vous le code qui crée la minuterie plusieurs fois?


@CODESINCHAOS, HA Vous avez raison, j'ai créé plus que sur la minuterie, c'est pourquoi elle leva si vite. Mais cela soulève toujours 10 par seconde. étrange.


Est-ce que cela se produit à la première course ou sur les cours suivants? J'ai eu un problème similaire, mais je n'ai trouvé que je ne retirais pas le processeur d'événements, alors que j'ai terminé une course, la minuterie était plus rapide puisque le gestionnaire était appelé plus d'une fois sur chaque tique


comment ironique, l'intervalle était éteint dans votre code mais correct dans votre message


En raison du fait que vous n'aviez pas fourni le code correct et que vous l'avez résolu vous-même, ma suggestion serait de répondre à votre propre question avec votre solution ou de le fermer. Je dis le fermer, car, comme cela se tient, cela aidera à peine tous les futurs visiteurs d'autres que le fait de vérifier les fautes de frappe.


Comment cela a-t-il 4 votes?


4 Réponses :


5
votes

au lieu de Cochez événement, utilisez ELAPSED événement. xxx

et modifier la signature de la méthode TIMEREVERPROCessor; < Pré> xxx


7 commentaires

TIMER.LASED + = TIMEREVERPROCESSOR; est suffisant.


S'il utilise System.Windows.Forms.Timer, il n'y a pas d'événement écoulé.


C'est une classe différente. Il n'y a pas de classe de classe avec les deux cocher et écoulés événements.


en quelque sorte je ne peux pas utiliser l'événement écoulé


Pouvez-vous fournir un lien vers system.windows.forms.ticer.elapsed sur msdn? Je ne peux pas le trouver. Êtes-vous confondre une minuterie de formulaires Windows avec une autre classe de minuterie?


Il suffit de "cette affaire" comme "ElapseDeventargs" dérive de "Eventargs".


Il y a le System.Timers.Timer. Écoulée événement, mais pas pour .. Formulaires ..



11
votes

L'intervalle approprié pour obtenir une seconde est 1000. L'intervalle est l'heure entre les ticks en millisecondes:

MSDN: Timer.Interval Property

Donc, ce n'est pas l'intervalle que vous avez défini qui est faux. Vérifiez le reste de votre code pour quelque chose comme la modification de l'intervalle de la minuterie ou de la liaison de la coque Event plusieurs fois.


0 commentaires

1
votes

Tous les autres endroits que vous utilisez TimerensionProcessor ou Counter?

Quoi qu'il en soit, vous ne pouvez pas compter sur l'événement étant exactement livré un par seconde. Le temps peut varier et le système ne s'assurera pas que le temps moyen est correct.

donc au lieu de _Counter, vous devez utiliser: xxx


Remarque: cela ne résout pas le problème de TimerEventProcessor appelé souvent, ou _Counter incrémenté souvent. Il ne le masque que, mais c'est aussi la bonne façon de le faire.


1 commentaires

Au moins, utilisez utcnow pas maintenant , mais même cela a des problèmes lorsque l'horloge change.



0
votes

Déjà un vieux fil mais je viens de lire l'article de Microsoft où ils ont mentionné que le système.Timer dépend du système d'exploitation. Ce qui signifie que si vous utilisez Windows 7 et que l'intervalle est inférieur à 15 millisecondes, l'intervalle sera retardé.

Vous utilisez la propriété intervalle pour déterminer la fréquence à laquelle l'événement écoulé est viré. Étant donné que la classe de minuterie dépend de l'horloge système, elle a la même résolution que l'horloge système. Cela signifie que l'événement écoulé déclenchera à un intervalle défini par la résolution de l'horloge système si la propriété d'intervalle est inférieure à la résolution de l'horloge système. L'exemple suivant définit la propriété d'intervalle à 5 millisecondes. Lorsqu'il est exécuté sur un système Windows 7 dont l'horloge système a une résolution d'environ 15 millisecondes, l'événement déclenche environ 15 millisecondes plutôt que tous les 5 millisecondes.


2 commentaires

Intéressant. Pourriez-vous ajouter un lien pour votre devis?


Sûr! docs.microsoft.com/ EN-US / DOTNET / API / ...