c# - 如何立即停止计时器

Posted

技术标签:

【中文标题】c# - 如何立即停止计时器【英文标题】:c# - How to stop a timer Immediately 【发布时间】: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;

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

【问题讨论】:

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

【讨论】:

以上是关于c# - 如何立即停止计时器的主要内容,如果未能解决你的问题,请参考以下文章

如何停止在 C# 类中运行的计时器

立即安全地终止线程 (C#)

NAudio 使用 C# 播放 x 毫秒的正弦波

启动应用后,定时执行的定时器就立即执行是怎么回事

js定时器如何在执行完成以后往下执行

停止核心位置更新,然后使用计时器重新启动它们