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?
4 Réponses :
au lieu de et modifier la signature de la méthode TIMEREVERPROCessor; P> < Pré> xxx pré> p> Cochez code> événement, utilisez
ELAPSED code> événement.
TIMER.LASED + = TIMEREVERPROCESSOR; CODE> est suffisant.
S'il utilise System.Windows.Forms.Timer, il n'y a pas d'événement écoulé.
C'est une classe code> code> différente. Il n'y a pas de classe code> de classe code> avec les deux cocher code> et
écoulés code> é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 code> 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 code>
événement, mais pas pour .. Formulaires .. code>
L'intervalle approprié pour obtenir une seconde est 1000. L'intervalle MSDN: Timer.Interval Property P>
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 code> Event plusieurs fois. P> code> est l'heure entre les ticks en millisecondes: p>
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. p>
donc au lieu de _Counter, vous devez utiliser: p> 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. p> p>
Au moins, utilisez utcnow code> pas
maintenant code>, mais même cela a des problèmes lorsque l'horloge change.
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é. P>
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. P> blockQuote>
Intéressant. Pourriez-vous ajouter un lien pour votre devis?
Sûr! docs.microsoft.com/ EN-US / DOTNET / API / ...
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?