【问题标题】:c# - How to stop a timer Immediatelyc# - 如何立即停止计时器
【发布时间】:2015-09-19 10:58:09
【问题描述】:

我有一个间隔为 100 的 System.Timers.Timer。我的问题是,如果我在计时器中设置 enable = false,计时器方法中的当前工作进程是否会立即停止?或方法完成后。

private void watchTags(object obj, ElapsedEventArgs handler)
    {
        for(int i=0 ; i<10000;i++){
            // some works
        }
    }
private void stop_button(){
    watcher.Enabled = false;
}

我的循环是立即停止还是在完成后停止?

【问题讨论】:

  • 所以谷歌对你不起作用.. ??现在来吧...例如这是以前的帖子stackoverflow.com/questions/4563704/…
  • @MethodMan 我已经知道了。我的问题是进程何时终止。在完成当前方法后或一旦启用设置为 false
  • 所以解释一下 watchTags 是如何被调用的......你有一个 for 循环,但是你想在 for 循环中做什么......
  • 从硬件中读取一些持续约 100 毫秒的数据
  • 如果您的方法处于时间标记事件中,它将在没有完成过程的情况下停止。

标签: c# multithreading timer


【解决方案1】:

执行timer.Enabled = false 将停止计时器。同timer.Stop();

timer.Enabled = false = System.Threading.TimerSystem.Timers.Timer

timer.Stop(); =System.Windows.Forms.Timer

【讨论】:

    【解决方案2】:

    如果你使用System.Timers.Timer,你可以这样停止

    timer.Enabled = false
    

    如果您使用的是System.Threading.Timer,请使用此

    timer.Change(Timeout.Infinite , Timeout.Infinite)
    

    或者使用

    timer.Stop(); 
    

    如果您使用的是System.Windows.Forms.Timer

    参考C# - how do you stop a timer?

    【讨论】:

      【解决方案3】:

      使用timer.Stop();timer.Enabled = false;

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        好的。正如 Vijay Kumbhoje 在 cmets 中所说,当计时器完成时,watchTags 方法中的任何进程都会立即结束而不会完成工作。

        【讨论】:

          【解决方案5】:

          如果 2020 年有人去这里看到这个公认的答案,那就不对了。 Elapsed 事件不会以timer.Stop() 结束。这只会再次停止启动Elapsed 事件,仅此而已。

          我认为这个帖子中接受的答案是正确的:c# Task cancellation when using System.Timers

          【讨论】:

            猜你喜欢
            • 2011-06-01
            • 1970-01-01
            • 2014-06-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-24
            • 1970-01-01
            相关资源
            最近更新 更多