日期:2014-05-18 浏览次数:21052 次
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; }
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
------解决方案--------------------
另外添加一个Timer,设置Interval,用来读取原来的timer是否已经停止,如果已经停止,则启动原来的timer
------解决方案--------------------
timer1_Tick_1 只是执行第一次时 stop ,之后再执行就不要 stop 了?
如果是这样,首先设置间隔 10s ,再在 i++ 之前加上
if (i == 1) { timer1.Start(); }
------解决方案--------------------
计时器间隔设置 10s
timer1_Tick_1 方法里 if 判断去掉,i 这个变量也不要,第一行就是 timer1.Stop();
TimerStart 方法最后一行加上 timer1.Start();
这样就是计时器到点触发后就先关闭计时器,启动线程做你的工作,工作完成后开启计时器,等 10s 又再触发计时器方法,再关闭计时器,开始处理工作,循环这样,不知是不是你要的效果?
------解决方案--------------------
改成这样就好了嘛:
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");