【问题标题】:How to stop running Timer?如何停止运行定时器?
【发布时间】:2012-11-15 08:16:09
【问题描述】:

如果我创建并启动了System.Threading.Timer

Dim tcb As TimerCallback = New TimerCallback(AddressOf timerRoutine)
Dim t As Timer = New Timer(tcb, Nothing, DueTime, Period)

我该如何阻止它?

使用System.Timers.Timer 并致电Timer.Stop() 会更容易吗?

【问题讨论】:

标签: .net multithreading timer


【解决方案1】:

您可以通过 Timeout.Infinite 在计时器上调用方法 Change 来停止它: 见http://msdn.microsoft.com/en-us/library/yz1c7148(v=vs.80).aspx

t.Change(Timeout.Infinite, Timeout.Infinite)

【讨论】:

    【解决方案2】:

    您可以使用 Change 方法来做到这一点。看备注:

    http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx

    【讨论】:

    【解决方案3】:

    一个选项是t.Dispose(),它将处理Timer 并因此停止它。

    如果Dispose 被如下调用,它应该等待 10 秒以等待所有排队的计时器回调完成,然后再处理对象:

    Dim waitHnd As WaitHandle = New AutoResetEvent(False)
    t.Dispose(waitHnd)
    waitHnd.WaitOne(10000)
    

    【讨论】:

      猜你喜欢
      • 2014-11-04
      • 2013-08-11
      • 2015-09-23
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多