2013-10-23 218 views
0

我想知道是否有某种方法暂时暂停计时器,然后重新启动它。暂时暂停System.Timers.Timer在C#

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

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

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

我想在选择器()的开始处移除timer eventhandler,然后在Chooser()的末尾重新添加它。但是,这不起作用,因为计时器可能会在Chooser()运行时触发事件,并且不会处理该事件。

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

如果我可以在Chooser()的开头暂停计时器,然后在最后再次启动计时器,这将是理想的,但我不认为存在这种可能性。

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

+0

有一个小窗口,可以使定时器在停止后触发。考虑你的解决方案的可能性。 – hatchet

回答

0

在锁定下设置一个标志,表示DoSomething正在运行。还在锁定下,测试该标志是否已设置。如果是的话,只需返回并无所作为。

不可能可靠地停止定时器。即使同时停止计时器,也可以任意传送滴答事件(同时多次滴答)。

+0

是的,我想我只需要使用标志。谢谢。 – user2445507