Ho un oggetto timer. Voglio che venga eseguito ogni minuto. In particolare, dovrebbe eseguire un OnCallBackmetodo e diventare inattivo mentre un OnCallBackmetodo è in esecuzione. Una volta che un OnCallBackmetodo finisce, (a OnCallBack) riavvia un timer.
Ecco cosa ho adesso:
private static Timer timer;
private static void Main()
{
timer = new Timer(_ => OnCallBack(), null, 0, 1000 * 10); //every 10 seconds
Console.ReadLine();
}
private static void OnCallBack()
{
timer.Change(Timeout.Infinite, Timeout.Infinite); //stops the timer
Thread.Sleep(3000); //doing some long operation
timer.Change(0, 1000 * 10); //restarts the timer
}
Tuttavia, sembra che non funzioni. Funziona molto velocemente ogni 3 secondi. Anche quando si alza un punto (1000 * 10). Sembra che chiuda un occhio1000 * 10
Cos'ho fatto di sbagliato?
Timer.Change: "Se dueTime è zero (0), il metodo di callback viene richiamato immediatamente.". A me sembra zero.