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

本文关键字:System Timers Timer 暂停 | 更新日期: 2023-09-27 18:36:33

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

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

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

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

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

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

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

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

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

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

无法

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