Почему некорретно работает класс AutoResetEvent?
Необходимо основной поток ставить в режим ожидания, пока не вызовется событие окончания таймера. Но почему-то всё срабатывает сразу, не дожидаясь окончания таймера. И лишь после начинает выводиться в консоль события TimerCallback пачками по 10.
class Program
{
public static AutoResetEvent objAuto = new AutoResetEvent(false);
static Timer timer;
static void Main(string[] args)
{
MyApp();
Console.ReadLine();
}
private static void TimerCallback(Object o)
{
Console.WriteLine("Событие окончания таймера");
objAuto.Set();
}
private static void MyApp()
{
for(int i = 0; i < 10; i++)
{
Console.WriteLine("Запускаем таймер на 5 сек");
timer = new Timer(TimerCallback, null, 0, 5000);
Console.WriteLine("Ожидаем таймер");
objAuto.WaitOne();
Console.WriteLine("Переходим к следующему таймеру");
}
}
}
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
Вы неверно используете таймер
Вы указываете параметр dueTime как 0, отчего событие таймера вызывается незамедлительно.
dueTime UInt32Количество времени до начала использования параметра callback, в миллисекундах. Следует задать поле Infinite для того, чтобы не допустить запуск таймера. Задайте значение ноль (0) для немедленного запуска таймера.
