Vous ne pouvez pas garantir que votre code censé arrêter le timer s'exécutera avant l'invocation de l'événement timer. Par exemple, supposons qu'à l'instant 0, vous ayez initialisé le timer pour appeler l'événement à l'instant 5. Puis, à l'instant 3, vous décidez que vous n'avez plus besoin de cet appel. Et vous avez appelé la méthode que vous voulez écrire ici. Puis, pendant que la méthode était JIT-ted, le moment 4 arrive et le système d'exploitation décide que votre thread a épuisé sa tranche de temps et change. Et le timer invoquera l'événement, peu importe comment vous essayez - votre code n'aura tout simplement aucune chance de s'exécuter dans le pire des cas.
C'est pourquoi il est plus sûr de fournir une certaine logique dans le gestionnaire d'événements. Peut-être un ManualResetEvent qui sera réinitialisé dès que l'invocation de l'événement ne sera plus nécessaire. Donc, vous déposez le timer, puis vous définissez le ManualResetEvent. Et dans le gestionnaire d'événement de la minuterie, la première chose que vous faites est de tester le ManualResetEvent. S'il est dans l'état de réinitialisation, il suffit de revenir immédiatement. Ainsi, vous pouvez vous prémunir efficacement contre l'exécution indésirable de certains codes.