我正在用C#.Net重写VB 6.0程序进行实习。它测量来自精密磨床的输入数据,并提供其精度的读数。程序的许多内容都是在Timer对象中完成的,间隔为10.程序未完成,因此尚未在实际机器上进行测试,但我有一个生成Sin波的Debug模拟(确保在接收数据时,拨号和号码都按预期运行。
我正在使用WinForms和Timer对象,而不是System.Threading.Timer(尽管如果这听起来像是一个更好的选择,无论如何我都愿意使用它)。我使用System.Diagnostics.Stopwatch ElapsedTicks计算定时器从开始到结束平均循环的滴答数。在Form1上,计时器通常需要大约19500个刻度。当它切换到Form2时,在Form3上下降到大约15000,甚至更低到11000。
现在,Form3的评估速度更快,因为它会跳过不需要运行的代码的某些部分。 Form2应该运行整个Timer。更奇怪的是,在切换到Form2,然后再返回到Form1之后,计时器保持在16000左右,并且每次在表单之间切换时,计时器的速度会稍快一些。间隔总是保持不变10。
我不确定是在做什么,或者我如何强迫它以恒定速率运行。此外,我不确定它是否重要。这一直困扰着我,但我不确定当程序从机器接收实际数据时,它的评估速度会更快。
如果有人对计时器的行为方式有什么建议,或者如何限制它以恒定速率运行,或者即使我不担心,也会非常感激。
感谢您的时间
答案 0 :(得分:1)
当你的意思是循环时,是指执行事件逻辑所需的时间还是计时器滴答之间的时间? UI计时器可能不那么准确,因为它在UI线程上运行。
说实话,听起来你需要实时的要求,这是你不容易得到的东西(或者说,根本不需要)。你还必须与任意运行的垃圾收集抗争。
我不担心,虽然我可能会使用线程计时器,而不是UI计时器。