C# winform中timer函数如何停止,点运行后可再次启动周期事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform中timer函数如何停止,点运行后可再次启动周期事件相关的知识,希望对你有一定的参考价值。
参考技术A 在同一个按钮事件中写入代码:if(timer.Enable
==
true)
timer.Enable
=
false;//timer在运行时点击该按钮则停止计时
else
timer.Enable
=
true;//timer停止时点击该按钮timer开始计时
参考技术B 同上,Timer没有给出诸如Stop()一类的方法,使用Enable属性完全可以实现相应功能(这也意味着,即便提供Stop()方法,也将是在方法中设置Enable属性而已)。 参考技术C 为什么我的timer就有停止方法,timer.Stop()直接可以调用啊,再运行时timer.Start()
C# System.Threading.Timer如何停止
using System;
using System.Threading;
namespace Reminder
public class Reminder
public Timer stateTimer;
public void Check()
AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecher = new StatusChecker();
TimerCallback tcb = statusChecher.CheckInventory;
stateTimer = new Timer(tcb, autoEvent, 1000, 5000);
//autoEvent.WaitOne(1, false);
stateTimer.Change(5000, 1000);
stateTimer.Dispose();
class StatusChecker
public void CheckInventory(object stateInfo)
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
int inventoryShortageCount = 5;
if (inventoryShortageCount > 0)
System.Windows.Forms.MessageBox.Show("");
在Form里面调用
private void Form1_Load(object sender, EventArgs e)
Reminder r = new Reminder();
r.Check();
//r.stateTimer.Dispose();
//如果这样,Timer就直接被Dispose掉了,如何才能在Form里面随意停止Timer
autoEvent.WaitOne(1, false);
stateTimer.Change(5000, 1000);
stateTimer.Dispose();
这三条后来测试用的,不是原来代码
Timers.Timer 默认多线程,可设置为单线程
既然是多线程,不管通过回调 还是事件 执行任务,都是开启的另一个线程;
你可以暂停或销毁计时器(Timer)本身,但是不能操作里面新开线程的任务,这也是多线程设计的期望方式,因为你不知道 超线程里面到底执行到哪儿了。
但是,像我这种(刁民)有时候就喜欢那么横,所以就把 新开的任务装在一个 new Thread()里面,这样就可以操作这个线程了,(到时只需要暴力abort() 终止这个线程就行)。
Threading.Timer 暂停: Change(-1,任意值); 启动: Change(大于等于0,时间间隔);
Timers.Timer 暂停: Stop(); 启动:Start();
再次提醒,这里暂停的意思是 计时器不在重新启动,不是终止计时器的里面任务。 参考技术A stateTimer.Change(-1, 任意值);就可以停止。
Threading.Timer 没有Enabled属性。 参考技术B timer.stop()调用停止的方法呀,timer.start()开始 开始和停止是对应的呀 参考技术C timer enabled属性改为false试试。 参考技术D stateTimer.Enable=false;
stateTimer.Dispose();
以上是关于C# winform中timer函数如何停止,点运行后可再次启动周期事件的主要内容,如果未能解决你的问题,请参考以下文章