Comment déclencher un événement de minuteur un à la fois. Par exemple, j'ai une minuterie qui déclenche un événement toutes les 10 minutes. L'événement déclenché prend 10 minutes ou plus pour terminer l'exécution. Je voudrais que la minuterie se réinitialise APRÈS que l'événement est terminé. En d'autres termes, je ne veux pas déclencher plus d'une instance de l'événement à un moment donné.Comment élever seulement 1 événement Timer en C#?
Répondre
Habituellement ce que je fais est d'avoir mon événement arrêter le chronomètre quand il est relevé et puis redémarrez le chronomètre lorsque le processus d'événement terminé:
private void timerHandler(object sender, TimerElapsedEventArgs e)
{
Timer timer = (Timer)sender;
timer.Stop();
RunProcess();
timer.Start();
}
public void RunProcess()
{
/* Do stuff that takes longer than my timer interval */
}
Maintenant, ma minuterie repartira à la fin du processus
Utiliser System.Timers.Timer pas le Threading
Définissez AutoReset sur false.
Puis recommencez lorsque vous avez terminé.
+1 pour 'MyTimer.AutoReset = false'. Sinon, quelqu'un pourrait oublier de gérer manuellement les appels 'Start()' et 'Stop()'. –
Je ne comprends pas pourquoi Stop/Start manuel a obtenu plus de votes –
Il peut être difficile d'arrêter les compteurs pour des raisons d'efficacité ou de logique. Le code suivant se synchronise en ignorant les événements.
static readonly object key = new object();
void TimerHandler(object sender, TimerElapsedEventArgs e)
{
if(Monitor.TryEnter(key))
{
try
{
//do your stuff
}
finally
{
Montitor.Exit(key);
}
}
}
- 1. Élever un événement en C#
- 2. Élever un événement vb6 en utilisant interop
- 3. comment arrêter événement timer jquery
- 4. Élever un événement dans un contrôle personnalisé
- 5. Comment élever un événement de validation d'une pression de touche
- 6. Comment élever un événement global dans le dojo?
- 7. Non-réentrant C# timer
- 8. Déclenchement d'actions en utilisant Timer dans C#
- 9. C Timer Callback
- 10. C# WP7 singleton timer
- 11. comment récupérer seulement 1 ligne d'un objet
- 12. élever un événement dans un contrôle utilisateur qui retourne CommandEventArgs
- 13. keydown gèle timer C#
- 14. Dictionnaire 1 à 1 bidirectionnel en C#
- 15. Comment obtenir le résultat en utilisant seulement 1 requête?
- 16. C# updatepanel avec timer Page_load
- 17. Élever un événement sur la fenêtre parent à partir d'un contrôle utilisateur dans .NET C#
- 18. Clé presse événement en C#
- 19. Pourquoi Regex.Match renverra seulement 1 résultat?
- 20. Utilisation de Timer dans vb.net
- 21. Timer Java en PHP
- 22. PHP cast en entier avec seulement 1 ou 2 caractères
- 23. Élever l'autorisation d'exécuter exe en Java
- 24. Comment implémenter un événement cancel en C#
- 25. php: seulement enregistrer visite 1 par heure
- 26. Android - ListView avec seulement 1 élément extensible
- 27. événement COM manutention en C++
- 28. Excel événement autofill en C#
- 29. Crochet KeyPress événement en C#
- 30. Autoriser seulement 1 instance d'un script python
Est-ce pas introduisons une condition de course (http://msdn.microsoft.com/en-us/library/system.timers.timer.stop.aspx) qui est pas un problème avec la solution AutoReset ? – Jon