我有一个关于计时器使用的理解问题,它与错误代码没有直接关系。我想了解正在发生的事情...
我编写了一个程序,其中一部分通过 COM 端口从传感器读取数据并将其存储到变量中。这是使用 DataReceivedHandler 完成的,因此它是“在后台”完成的。现在我需要一个计时器,它每秒从该变量中获取实际值并进行一些计算。计算时间约为 50-70 毫秒,因此 1 秒应该是相当足够的时间。我尝试使用 System.Timer.Timer 和 System.Threading.Timer 乍一看似乎都可以正常工作,但是当我让程序运行几个小时时,它开始卡顿-有时没有计时器事件持续几秒钟,然后一个中有 20 个(但并非每个跳过的计时器事件都被赶上 - 许多只是迷路了)。定时器事件是否存储在某个队列中并且根本没有得到它们的时间片?据我了解,
我通过使用 BackgroundWorkers 而不是计时器解决了这个问题;我创建了一个循环来完成我的工作,然后休眠(1000 毫秒 - 工作时间)。这很完美,为什么我的计时器不能呢?
非常感谢任何提示!