2 таймера, один на n секунд позади другого


Вот моя проблема: у меня есть таймер с интервалом в 5 минут. Я хочу, чтобы меня уведомили, что на таймере осталось всего 30 секунд, чтобы я мог включить/отключить некоторые элементы управления (winforms в c#). Я предполагаю, что мне понадобятся 2 таймера для этого, возможно, новый класс MyTimer, который будет иметь эти 2 таймера в качестве членов данных. Первый таймер будет длиться 5 минут, а второй-4,5 минуты. Второй таймер вызовет событие, которое я буду слушать. Есть ли у кого-нибудь есть идеи получше на этот счет? Спасибо за помощь.

2 2

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-этоздесь .