Timers.Timer продолжить работу после превышения интервала - PullRequest
1 голос
/ 17 апреля 2019

Я объявляю список таймеров следующим образом:

private List<System.Timers.Timer> dio_timers = new List<System.Timers.Timer>();

И заполняю список таймеров в цикле:

private void DIOTimerControl()
{
    for (int i = 0; i < PrinterNumber; i++)
    {
        dio_timers.Add(new System.Timers.Timer()
        {
            Interval = Convert.ToDouble(lst_PrinterStruct[i].DIOCountWindow),
            AutoReset = false,
        });

        dio_timers[i].Elapsed += OnTimerOutEvent;

        File.AppendAllText("PackingLogTimer.txt", "Timer " + i.ToString() + " Added at: " 
            + DateTime.Now.ToLocalTime().ToString() + "; Timer duration: " 
            + Convert.ToDouble(lst_PrinterStruct[i].DIOCountWindow).ToString() + "\r\n");
    }
}


private void OnTimerOutEvent(object source, ElapsedEventArgs e)
{
    int index = dio_timers.IndexOf((System.Timers.Timer)source);
    dio_timers[index].Stop();
    File.AppendAllText("PackingLogTimer.txt", "Date: " 
        + DateTime.Now.ToLocalTime().ToString() + "; Timer " 
        + index.ToString() + " stops at: " + e.SignalTime.ToString() + "\r\n");
}

И запускаю таймеры в другой функции:

private void TimerStart()
{
    for (int i = 0; i < PrinterNumber; i++)
    {
        dio_timers[i].Start();
        File.AppendAllText("PackingLogTimer.txt", "Timer " + i.ToString() 
            + " Started at: " + DateTime.Now.ToLocalTime().ToString() 
            + "; Timer duration: " 
            + Convert.ToDouble(lst_PrinterStruct[i].DIOCountWindow).ToString() + "\r\n");
    }
}

Когда таймеры закончатся, я вижу следующие данные в текстовом файле

Таймер 0 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 1 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 2 Добавлено: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 3 Добавлено: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 4 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 5 Добавлено: 17.04.2019 20:04:13;Продолжительность таймера: 4000Таймер 6 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 7 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 8 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 3000Таймер 9 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 5000Таймер 10 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 4000Таймер 11 Добавлено в: 17.04.2019 20:04:13;Продолжительность таймера: 8000Таймер 0 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 1 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 2 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 3 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 4 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 5 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 4000Таймер 6 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 7 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 2000Таймер 8 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 3000Таймер 9 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 5000Таймер 10 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 4000Таймер 11 Начало работы: 17.04.2019 20:04:13;Продолжительность таймера: 8000Дата: 17.04.2019 20:04:15;Таймер 7 останавливается в: 17.04.2019 20:04:15Дата: 17.04.2019 20:04:16;Таймер 8 останавливается в: 17.04.2019 20:04:16Дата: 17.04.2019 20:04:17;Таймер 10 останавливается на: 17.04.2019 20:04:17Дата: 17.04.2019 20:04:18;Таймер 9 останавливается на 17.04.2019 20:04:18Дата: 17.04.2019 20:04:21;Таймер 11 останавливается в: 17.04.2019 20:04:21Дата: 17.04.2019 20:04:26;Таймер 6 останавливается в: 17.04.2019 20:04:26Дата: 17.04.2019 20:04:26;Таймер 4 останавливается в: 17.04.2019 20:04:26Дата: 17.04.2019 20:04:26;Таймер 3 останавливается на 17.04.2019 20:04:26Дата: 17.04.2019 20:04:26;Таймер 2 останавливается в: 17.04.2019 20:04:26Дата: 17.04.2019 20:04:26;Таймер 1 останавливается в: 17.04.2019 20:04:26Дата: 17.04.2019 20:04:26;Таймер 0 останавливается на: 17.04.2019 20:04:26Дата: 17.04.2019 20:04:26;Таймер 5 останавливается на 17.04.2019 20:04:26

Почему таймеры с 2-секундными интервалами работают около 13 секунд и останавливаются в последнюю очередь?Где моя ошибка?

...