仪器社区

c#计时器timer在do while里为什么不执行?

宇文化龙0915 2014-12-21
窗体里一堆label设为隐藏了,timer1的触发事件是每隔0.5秒让这堆label循环逐个显示。label1.Visible=true; 现在想让计时器运行5秒后停止,但不知哪里出错,任何label都没显示过,计时器没被触发? DateTime nowtime = DateTime.Now; ... 窗体里一堆label设为隐藏了,timer1的触发事件是每隔0.5秒让这堆label循环逐个显示。label1.Visible=true; 现在想让计时器运行5秒后停止,但不知哪里出错,任何label都没显示过,计时器没被触发? DateTime nowtime = DateTime.Now; DateTime aftertime = nowtime.AddSeconds(5); //aftertime是nowtime的5秒后 timer1.Start();//启动计时器 timer1.Enabled = true;//计时器事件开启触发。 do { if (DateTime.Now > aftertime) { timer1.Stop(); timer1.Enabled = false; break; } } while (true);
评论
全部评论
岁月无恙哦哦
不要用do while,这样子根本不会执行到Timer里面的;
if (DateTime.Now > aftertime)
{
timer1.Stop();
timer1.Enabled = false;
break;
}
上面的代码写在Timer的Trick事件中看看;
6 0 2014-12-22 0条评论 回复
言语521
你的Timer触发里的代码怎么写的?这里看到的仅仅是启用Timer,5秒后关闭Timer。
不过针对你这个代码说一句。
我情愿使用Sleep(5000)也不愿意使用你的dowhile啊……
CPU会一直在这个循环中消耗时间。虽然理论上不至于让机器死掉,但是怎么看也是一个不科学的代码。

你完全可以这么写
Timer.Enable = true;
Sleep(5000);
Timer.Enable = false;

或者这么写,在Timer的触发函数里加上
if(DateTimer.Now > aftertime)
Timer.Enable = false;
只不过需要将aftertime作为成员变量。
16 0 2014-12-22 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论