2009-11-13 7 views
1

J'ai un temporisateur qui appelle sa méthode de gestionnaire pair toutes les 30 secondes. mais je veux d'abord appeler cette méthode. la signature de la méthode de gestionnaire d'événements estQuelle est la bonne façon d'appeler le temporisateur ElapsedEventHandler

void TimerElapsed_GenerateRunTimes(object sender, System.Timers.ElapsedEventArgs e) 

alors comment devrais-je appeler à droite? je peux effectuer les opérations suivantes

TimerElapsed_GenerateRunTimes(timerGenerateRunTimes,null); 

mais je ne suis pas sûr que ce soit la bonne façon de le faire d'ailleurs de cette façon l'argument événement e sera nulle

Répondre

1

Si vous ne dépendez pas être e non nul, je ne vois aucun problème à appeler votre méthode avec null. C'est votre méthode après tout, et il n'y a rien de spécial à ce sujet, sauf qu'il correspond à la signature d'un délégué. Vous n'avez même pas besoin de passer dans l'objet timer si vous n'utilisez pas sender dans le corps de la méthode.

(Remarque: Si vous implémentez votre propre classe avec un événement, vous aurez toujours envie de passer this comme sender et un objet non nul pour e de la méthode où l'événement.)

3

Au minimum, passez un objet EventArgs.Empty au lieu de null. En outre, il est bon (AFAIK) à l'appel manuel un événement avec le mot-clé « ce » comme expéditeur:

TimerElapsed_GenerateRunTimes(this, EventArgs.Empty); 
+0

mais dans ce cas, "this" ne fera pas référence à une minuterie mais à une classe ServiceBase – Karim

0

Il serait sans doute préférable de créer une fonction distincte qui fait le travail de la minuterie, et juste appelez ceux-là. De cette façon, il n'y aura pas de confusion à l'avenir, si vous voulez vérifier l'expéditeur, ou les arguments d'événement dans le gestionnaire d'événements. Vous seriez également en mesure de savoir dans le code si le code a été activé manuellement, ou activé à partir de l'événement.

Questions connexes