有没有办法检测定时器的已用事件是否重叠?例如,我在经过的事件之间创建一个间隔为200毫秒的Timer,但事件执行的代码花费的时间超过200毫秒。结果,在最后一个事件结束之前执行另一个已经过去的事件。还有一种方法可以防止这种情况发生,以便在最后一个事件完成之前不会调用另一个事件吗?
答案 0 :(得分:1)
如果要在之后启动下一个循环当前的循环已完成,请在计时器点击它的滴答事件时停止计时器,如果已完成则重新启动它。
Timer fires Tick-Event
Disable/Stop Timer
Program logic goes here
Restart Timer
答案 1 :(得分:1)
如果你想让你的计时器事件发生在200ms标记上并且只是跳过一个(而不是推迟),如果前一个仍在运行那么你可以使用锁定代码。
如果您使用方法Monitor.TryEnter,那么它将返回一个布尔值,告诉您它是否已获得锁定(因此,如果另一个线程已经在锁定的代码中)。如果你愿意,这将使你能够跳过并等待下一个运行时间(或写出调试消息,抱怨它花了太长时间或其他东西)。
这是否是一个好的解决方案真的取决于你的计时器想要做什么。通常,其他人建议在上一个事件完成后为下一个事件启动计时器的方法对于该工作来说已经足够了。
答案 2 :(得分:0)