Quelle est la bonne approche pour utiliser un System.Timers.Timer? Je veux dire ... Je crée la minuterie, définissez l'intervalle et la méthode à appeler sur l'événement écoulé.System.Timers.Timer cycle de vie
double ms = 1000;
var t = new System.Timers.Timer(ms);
t.AutoReset = false;
t.Elapsed += (sender, e) => { runTask(); };
t.Start();
Et ensuite? Un appel doit-il être éliminé par la minuterie? Je suppose que je ne peux pas, ou l'événement Elapsed ne se produira jamais. Est-ce que je devrais enregistrer le Timer dans une variable globale pour éviter de perdre des références à celui-ci et ainsi le GC pourrait disposer du timer avant que le Elapsed ne soit appelé? Et si oui, comment puis-je disposer du Timer une fois que l'événement Elapsed a été traité (donc ma tâche a été exécutée)?
Cela peut créer un problème si le temporisateur a été créé sur le formulaire A et l'utilisateur quitte l'application (déclenchera une exception si la tâche tente d'accéder à un contrôle de formulaire, il m'est arrivé une fois). –
@ Mohib Sheth: ce que j'ai répondu est de savoir comment protéger Timer d'être disposé .. pour l'arrêter évidemment, vous devrez appeler Stop(). Également préférable si vous pouvez vous désinscrire de votre gestionnaire d'événements lorsque cela est nécessaire. Alexis l'a expliqué .... –
Le commentaire de code que vous avez cité n'est plus présent dans la documentation de Timer, d'ailleurs. –