. 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();
在计时器滴答函数中,如果您希望计时器在设定的间隔后再次启动,请重新启用计时器。Post timer tick code
- 如果你启动一个定时器,另一个定时器不会停止,除非你通过调用它的
Stop()
函数或将其Enable
更改为false来停止它。 - 在你提供的代码中,你没有在任何计时器上分配定时器
Tick
事件处理程序,所以在循环中分配它们timeSchedule[i].Tick += OnTimerTick
.. -
使用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也认识到如果这个时间是我开始与否,然而,我会记住它,总有一天我会发现它从这里的一切都很有帮助:)