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

C# 暂时暂停C中的System.Timers.Timer#,c#,events,timer,locking,C#,Events,Timer,Locking,我想知道是否有办法暂时暂停计时器,然后重新启动它 我有一个方法“DoSomething()”,它可以在计时器事件中调用,也可以在另一个名为“Chooser()”的方法中调用。DoSomething()应该从计时器或选择器()调用,但不应该调用两次 问题是Chooser()需要一些时间来决定是否应该调用DoSomething()。当Chooser()决定是否也应调用DoSomething()时,不应调用DoSomething()。这将导致DoSomething()被调用两次 如果Chooser()

我想知道是否有办法暂时暂停计时器,然后重新启动它

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

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

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

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

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

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


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

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


不可能可靠地停止计时器。即使在停止计时器后,也可以任意传递滴答事件,甚至可以同时传递(同时有多个滴答)。

是的,我想我只需要使用标志。谢谢。有一个小窗户,在那里定时器可以在停止后启动。在你的解决方案中考虑这种可能性。