0

我想知道是否有某种方法可以暂时暂停计时器然后重新启动它。

我有一个方法“DoSomething()”,可以从计时器事件中调用,也可以在称为“Chooser()”的不同方法中调用。DoSomething() 应该从计时器 OR Chooser() 中调用,但不应调用两次。

问题是Chooser() 需要一些时间来决定它是否应该调用DoSomething()。当 Chooser() 决定是否也应该调用 DoSomething() 时,不应调用 DoSomething()。这将导致 DoSomething() 被调用两次。

如果 Chooser() 确实选择调用 DoSomething() 它将禁用计时器。同样,如果计时器调用 DoSomething(),它将禁用 Chooser() 中的代码。

我正在考虑在选择器()的开头删除计时器事件处理程序,然后在选择器()的末尾重新添加它。但是,这不起作用,因为计时器可能会在 Chooser() 运行时触发事件,并且不会处理该事件。

我不认为我可以使用锁,因为我只想调用 DoSomething() 一次。

如果我可以在 Chooser() 开始时暂停计时器,然后在最后重新启动它,那将是理想的,但我不相信这种可能性存在。

我可以添加一个标志,但我想知道是否有更好的东西。

4

1 回答 1

0

在锁下设置一个标志,表示DoSomething正在运行。同样在锁下,测试该标志是否已经设置。如果是,则返回并且什么也不做。

无法可靠地停止计时器。即使在停止计时器之后,也可以任意传递 Tick 事件,甚至可以同时传递(同时有多个 Tick)。

于 2013-10-23T20:11:14.570 回答