超过间隔后Timers.Timer继续工作

时间:2019-04-17 19:13:21

标签: c# timer system.timers.timer

我这样声明计时器列表:

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秒并最后停止?我的错误在哪里?

0 个答案:

没有答案