1

我声明这样的计时器列表:

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

4

0 回答 0