2 таймера, один на n секунд позади другого
Вот моя проблема: у меня есть таймер с интервалом в 5 минут. Я хочу, чтобы меня уведомили, что на таймере осталось всего 30 секунд, чтобы я мог включить/отключить некоторые элементы управления (winforms в c#). Я предполагаю, что мне понадобятся 2 таймера для этого, возможно, новый класс MyTimer, который будет иметь эти 2 таймера в качестве членов данных. Первый таймер будет длиться 5 минут, а второй-4,5 минуты. Второй таймер вызовет событие, которое я буду слушать. Есть ли у кого-нибудь есть идеи получше на этот счет? Спасибо за помощь.
2 ответа:
Как Флорис Веллеман упоминал выше, вероятно, было бы лучше использовать 1 таймер, который увеличивается на минимальную временную базу, такую как 30 секунд или даже 1 секунда. Затем используйте счетчик и некоторые операторы условий, которые будут реагировать в определенное время. Наличие 2 таймеров потребует синхронизации между ними, что может вызвать некоторые проблемы.
Например, с интервалом в 1 секунду можно сделать следующее:
int TimerInterval = 60 * 5; // 5 minutes int NotifyTime = 30; // 30 seconds int counter = 0; // timer interval is set to 1 second private void callback_MyTimer(object sender, EventArgs e) { counter--; if (counter == NotifyTime) { // notify that 30 seconds are left... } // restart the counter for 5 minutes if (counter <= 0) { counter = TimerInterval; } }
Объекты ожидаемого таймера
И, в частности, функция
SetWaitableTimer
позволяют управлять временем и периодом ожидания отдельно.Документация MSDN-этоздесь .