Как заблокировать таймер при обработке прошедшего события?
У меня есть таймер, который не должен обрабатывать обработчик прошедшего события одновременно. Но обработка одного прошедшего событиямай мешать другим. Я реализовал приведенное ниже решение, но что-то не так; кажется, что я должен использовать таймер по-другому или использовать другой объект в пространстве потоков. Казалось, таймер подходит лучше всего, потому что мне нужно периодически проверять состояние, но иногда проверка занимает больше времени, чем мой интервал. Это лучший способ подойти к этому?
// member variable
private static readonly object timerLock = new object();
private bool found = false;
// elsewhere
timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds;
timer.Elapsed = Timer_OnElapsed;
timer.Start();
public void Timer_OnElapsed(object sender, ElapsedEventArgs e)
{
lock(timerLock)
{
if (!found)
{
found = LookForItWhichMightTakeALongTime();
}
}
}