暂时在C#中暂停System.Timers.Timer

时间:2013-10-23 20:03:08

标签: c# events timer locking

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

在锁定下设置一个标志DoSomething正在运行的标志。同样在锁定下,测试是否已设置该标志。如果是的话,只需返回并不做任何事情。

无法可靠地停止计时器。即使在停止计时器之后,也可以同时交付Tick事件(同时多个滴答)。

相关问题