.NET Timer数组问题

时间:2011-07-19 11:35:56

标签: c# .net arrays timer

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

我正在使用Windows.Forms.Timer

在课堂上我宣布

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();

3 个答案:

答案 0 :(得分:0)

在计时器计时功能中,如果您希望在设定的间隔后再次点火,请重新启用计时器。发布计时器刻度代码

答案 1 :(得分:0)

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

    一个。 Timer.Tick处理程序将在UI线程上执行,这将导致UI在执行tick中的代码时没有响应。

    System.Windows.Form.Timer具有较低的准确度 limited to accuracy of 55 milliseconds,并且您在代码中使用23,但这并不意味着它在使用时会是23 System.Timers.Timer但它有更好的解决方案..

答案 2 :(得分:0)

感谢我在这里的每一个答案我已经解决了问题......这都是我的错:(当我在Form激活的triger中对这个数组进行语义化时,我没有意识到我在做什么...现在它已经解决了顺便说一句...感谢有关这个计时器准确性的建议......(如果这个时间对我来说是开始还是没有使用23ms,那么,我会记住它,有一天我会找到它这里的所有内容都很有用:))