Почему некорретно работает класс 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) для немедленного запуска таймера.

→ Ссылка