[Timer] Forcer l'exécution d'un ElapsedEventHandler
Bonjour,
dans mon service Windows, j'ai un Timer qui est cadencé toutes les N minutes (lorsque ces N minutes sont passées, la méthode Timer_Elapsed(object source, ElapsedEventArgs e) est appelée).
Code:
1 2 3 4
| _Timer = new System.Timers.Timer();
_Timer.AutoReset = false;
_Timer.Interval = N_MINUTES * 60 * 1000;
_Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed); |
Je communique avec ce service par WCF pour lui envoyer des commandes.
L'une d'entre elle (Execute()) sert à forcer l'exécution de la méthode normalement appelée toutes les N minutes (Timer_Elapsed(object source, ElapsedEventArgs e)).
J'ai essayé d'appeler directement cette méthode mais apparemment ce n'est pas possible.
Code:
1 2 3 4
| public void Execute()
{
Timer_Elpased(null, null);
} |
J'ai aussi essayé d'arrêter le Timer, lui mettre un intervalle d'1ms et de le relancer :
Code:
1 2 3 4 5 6 7 8 9
| public void Execute()
{
lock (LockTimer)
{
_Timer.Stop();
_Timer.Interval = 1;
_Timer.Start();
}
} |
mais j'ai l'impression que des threads se chevauchent et yen a plusieurs qui se lancent...les locks sur l'object LockTimer doivent déconne ou je sais pas.
Auriez-vous une autre idée ? Invoke, Raise event ou un truc dans le genre ?
Merci