. net定时器数组问题

本文关键字:问题 数组 定时器 net | 更新日期: 2023-09-27 18:02:26

我创建了一个计时器数组并启动了所有计时器,一切都很好,但在调试模式下,我发现如果我在数组中启动一个计时器,然后另一个,以前的计时器停止。我应该如何保持更多的计时器运行?我喜欢动态结构,但我不喜欢它:D

我用Windows.Forms.Timer

在class中声明

Timer[] timeSchedule = new Timer[0];

用这个初始化它们。它从listview中获取数组的大小,从加载listview时创建的字符串中获取间隔。我希望你能理解。

private void TimerRefresh()
{
    string[] TempArray = new string[lvSchedule.Items.Count];
    timeIntervals = new int[lvSchedule.Items.Count];
    TempArray = intervals.Split(Convert.ToChar(","));            
    for (int i = 0; i < timeSchedule.Count(); i++)
    {
        timeSchedule[i] = new Timer();                
        timeIntervals[i] = Convert.ToInt32(TempArray[i]);
        if (timeIntervals[i] == 0)
        {
            timeSchedule[i].Interval = 23;
        }
        else
        {
            timeSchedule[i].Interval = timeIntervals[i];
            timeSchedule[i].Tag = lvSchedule.Items[i].Text;
        }
    }
}

我用简单的

timeSchedule[lvSchedule.SelectedItems[0].Index].Start();

. net定时器数组问题

在计时器滴答函数中,如果您希望计时器在设定的间隔后再次启动,请重新启用计时器。Post timer tick code

  1. 如果你启动一个定时器,另一个定时器不会停止,除非你通过调用它的Stop()函数或将其Enable更改为false来停止它。
  2. 在你提供的代码中,你没有在任何计时器上分配定时器Tick事件处理程序,所以在循环中分配它们timeSchedule[i].Tick += OnTimerTick ..
  3. 使用System.Timers.Timer或System.Threading.Timer代替当前的System.Windows.Forms.Timer,因为:

    。计时器。Tick处理程序将在UI线程上执行,这将导致UI在Tick中的代码执行时没有响应。

    b。System.Windows.Form.Timer具有较低的精度 limited to accuracy of 55 milliseconds和你在你的代码中使用23,但这并不意味着它将是确切的23时使用System.Timers.Timer,但它有一个更好的分辨率。

谢谢大家的回答,我已经解决了这个问题…这都是我的错:(我没有意识到我在做什么,当我把这个数组的初始化形式激活触发器,然而…现在问题解决了。顺便说一下……谢谢你对这个计时器准确性的建议…(我使用23ms也认识到如果这个时间是我开始与否,然而,我会记住它,总有一天我会发现它从这里的一切都很有帮助:)