Je sais que cela semble stupide, mais j'ai tout essayé pour arrêter un minuteur, mais le minuteur ne s'arrête pas. Je travaille sur un jeu et j'apprécierais si quelqu'un pouvait me dire comment arrêter un minuteur.
Réponses
Trop de publicités?Cela dépend de la minuterie. S'il fait partie de l'espace de nom du threading, il faut s'en débarrasser et le recréer quand vous en avez besoin, ou faire en sorte que le délégué du timer attende l'événement de réinitialisation (cf. msdn ). L'espace de nom System.Timers possède une méthode de démarrage et d'arrêt.
J'ai également rencontré le même problème à plusieurs reprises.
//Timer init.
var _timer = new System.Timers.Timer
{
AutoReset = true,
Enabled = true,
Interval = TimeSpan.FromSeconds(15).TotalMilliseconds //15 seconds interval
};
_timer.Elapsed += DoSomethingOnTimerElapsed;
//To be called on timer elapsed.
private void DoSomethingOnTimerElapsed(object source, ElapsedEventArgs e)
{
//Disable timer.
_timer.Enabled = false; //or _timer.Stop()
try
{
//does long running process
}
catch (Exception ex)
{
}
finally
{
if (_shouldEnableTimer) //set its default value to true.
_timer.Enabled = true; //or _timer.Start()
}
}
//somewhere in the code if you want to stop timer:
_timer.Enabled = _shouldEnableTimer = false;
//At any point, if you want to resume timer add this:
_timer.Enabled = _shouldEnableTimer = true;
Pourquoi le faire ?
Supposons que le code à l'intérieur du bloc try prenne plus de temps. Donc, au moment où vous désactivez le timer ( _timer.Enabled = false or _timer.Stop()
), il y a de fortes chances que le code à l'intérieur du bloc try soit toujours en cours d'exécution. Par conséquent, après l'achèvement de la tâche, lorsqu'elle arrive à finally, elle est à nouveau activée s'il n'y a pas de flag( _shouldEnableTimer
) vérifier. Par conséquent, j'évite votre problème en ajoutant une vérification supplémentaire du drapeau.
Pour plus de clarté, veuillez consulter le code et les commentaires ajoutés. J'espère que cela vous aidera.
- Réponses précédentes
- Plus de réponses
10 votes
Postez votre code pour un bon départ.
3 votes
Laquelle des classes de minuteurs ? Il y en a 4 à ma connaissance, juste dans la BCL.
0 votes
En plus, essayez au moins de nous dire ce que vous avez fait pour l'arrêter. "Lire la documentation" est sinon la seule réponse valable.
0 votes
Appuyez sur le bouton du haut ! :P - montrez un code s'il vous plaît