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.Timer
或 System.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# - 如何立即停止计时器的主要内容,如果未能解决你的问题,请参考以下文章