timer停止后怎样再让他隔一段时间后在自动启动解决思路
timer停止后怎样再让他隔一段时间后在自动启动
页面上有一个label1,timer1,代码如下:
PS:现在的条件是执行完一次后,timer1必须停住,那么我在通过什么方式可以在以后每隔10s后再次启动timer1呢???
想的头都大了,希望大神显灵!
------解决方案--------------------
这是什么命名空间下的 timer ,设置 timer 的间隔为 10s,没必要在执行的方法里 stop 它。
------解决方案--------------------
再添加一个timer来控制timer1
------解决方案--------------------
页面上有一个label1,timer1,代码如下:
- C# code
private void timer1_Tick_1(object sender, EventArgs e) //timer1的tick事件 { if (i == 1) { timer1.Stop(); } else { Thread t = new Thread(new ThreadStart(TimerStart)); //这里是线程 t.Start(); } i++; } public void TimerStart() { label1.Text = "maopian jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } private void Form1_Load(object sender, EventArgs e) //加载事件 { timer1.Start(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; }
PS:现在的条件是执行完一次后,timer1必须停住,那么我在通过什么方式可以在以后每隔10s后再次启动timer1呢???
想的头都大了,希望大神显灵!
------解决方案--------------------
这是什么命名空间下的 timer ,设置 timer 的间隔为 10s,没必要在执行的方法里 stop 它。
------解决方案--------------------
再添加一个timer来控制timer1
------解决方案--------------------
- C# code
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
------解决方案--------------------
另外添加一个Timer,设置Interval,用来读取原来的timer是否已经停止,如果已经停止,则启动原来的timer
------解决方案--------------------
timer1_Tick_1 只是执行第一次时 stop ,之后再执行就不要 stop 了?
如果是这样,首先设置间隔 10s ,再在 i++ 之前加上
- C# code
if (i == 1) { timer1.Start(); }
------解决方案--------------------
计时器间隔设置 10s
timer1_Tick_1 方法里 if 判断去掉,i 这个变量也不要,第一行就是 timer1.Stop();
TimerStart 方法最后一行加上 timer1.Start();
这样就是计时器到点触发后就先关闭计时器,启动线程做你的工作,工作完成后开启计时器,等 10s 又再触发计时器方法,再关闭计时器,开始处理工作,循环这样,不知是不是你要的效果?
------解决方案--------------------
改成这样就好了嘛:
- C# code
private void timer1_Tick_1(object sender, EventArgs e) //timer1的tick事件 { try { if (i == 1) { return; //timer1.Stop(); } else { Thread t = new Thread(new ThreadStart(TimerStart)); //这里是线程 t.Start(); } } finally { i++; } } public void TimerStart() { this.BeginInvoke( new Action( () => { label1.Text = "maopian jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); })); //label1.Text = "maopian jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } private void Form1_Load(object sender, EventArgs e) //加载事件 { timer1.Start(); System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; }
------解决方案--------------------
就是说你在stop的时候不stop它,只是把方法return,不执行代码就OK啦
------解决方案--------------------
可以在线程方法(例子中的TimerStart())执行完毕后重置timer控件,设置间隔为10S,然后启动timer控件。。
System.Windows.Forms.Timer控件在启动时是不执行Tick事件的,在Interval指定时间到时后才会执行Tick事件。。。
例如你上边的demo:
public void TimerStart()
{
label1.Text = "maopian jijiang kaishi " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");