有没有办法检测计时器的经过事件是否重叠?例如,我创建了一个 Timer,在经过的事件之间有 200 毫秒的间隔,但在事件中执行的代码需要超过 200 毫秒。结果,在最后一个事件完成之前执行了另一个经过的事件。还有一种方法可以防止这种情况发生,以便在最后一个事件完成之前不调用另一个事件?
问问题
1594 次
3 回答
1
如果您想在当前循环完成后触发下一个循环,请在计时器遇到滴答事件时停止计时器,并在完成后重新启动它。
Timer fires Tick-Event
Disable/Stop Timer
Program logic goes here
Restart Timer
于 2010-12-21T08:16:49.950 回答
1
如果您希望您的计时器事件在 200 毫秒标记上发生,并且如果前一个仍在运行,则只需跳过一个(而不是推迟它们),那么您可以使用锁定代码。
如果您使用Monitor.TryEnter方法,那么它将返回一个布尔值,告诉您它是否已获得锁(因此如果另一个线程已经在锁定代码中)。如果需要,这将使您能够跳过并等待下一次运行时间(或者写出调试消息,抱怨它花费的时间太长或其他什么)。
这是否是一个好的解决方案真的取决于你的计时器想要做什么。通常,其他人建议在前一个事件完成后为下一个事件启动计时器的方法对于这项工作来说绰绰有余。
于 2010-12-21T09:45:30.600 回答
0
看看使用Timer.Stop 方法
于 2010-12-21T08:10:06.840 回答