Mam obiekt zegarowy. Chcę, żeby było uruchamiane co minutę. W szczególności powinien uruchamiać OnCallBack
metodę i stać się nieaktywny, gdy OnCallBack
metoda jest uruchomiona. Po OnCallBack
zakończeniu metody (a OnCallBack
) restartuje licznik czasu.
Oto, co mam teraz:
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
}
Jednak wydaje się, że nie działa. Działa bardzo szybko co 3 sekundy. Nawet jeśli podniesiesz kropkę (1000 * 10). Wygląda na to, że przymyka oko1000 * 10
Co zrobiłem źle?
Timer.Change
: "Jeśli dueTime ma wartość zero (0), metoda wywołania zwrotnego jest wywoływana natychmiast.". Wygląda na to, że to dla mnie zero.