悬赏分:50 离问题结束还有 10 天 20 小时 浏览:62 次
声明:
System.Timers.Timer timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
button按钮事件:
timer.AutoReset = true;
timer.Interval =15;
timer.Start ();
timer调用的函数:
void timer_Elapsed(object sender, ElapsedEventArgs e)
{
Console.Out.WriteLine(DateTime.Now +" "+ DateTime.Now.Millisecond.ToString() + "timer in:" + nCountTimer.ToString());
}
运行结果:
运行程序后第一次点击button事件:
2008-5-8 17:38:21 170timer in:0
2008-5-8 17:38:21 170timer in:1
2008-5-8 17:38:21 190timer in:2
2008-5-8 17:38:21 210timer in:3
不解?为什么前2次进入的时间相同?(每次尝试都是这样)
第二次点击button事件:
2008-5-8 17:38:23 383timer in:0
2008-5-8 17:38:23 403timer in:1
2008-5-8 17:38:23 423timer in:2
2008-5-8 17:38:23 443timer in:3
2008-5-8 17:38:23 463timer in:4
运行正常,20ms进入一次,但我设置的进入间隔为15ms!
再请教一下 如何让timers.timer单线程执行?lock怎么用?我加上了还是会同时多次进入!
|
Timer的即时机制不是很准确,
如果你要的精度很高的话,恐怕很难时间 建议改成 轮训+DoEvents 另外,Timer本是内置线程池,因此是多线程的,想要变成单线程,估计。。 使用LOCK等,锁定一个全局变量访问,具体可以参考MSDN。.NET 也内置的系统的同步机制 |