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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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