winXP + vs2005 + winform环境。
假设界面用了一个名为Timer1定时器,其Interval为500(即半秒钟),如果在Timer1_Tick()的多条代码中其中用了一条System.Threading.Thread.Sleep(2000);这样的语句,我想知道会发生何种情况。因为这条语句是延时两秒钟,而定时器本身的触发周期才半秒。请各位高手给解答解答,谢谢。
假设界面用了一个名为Timer1定时器,其Interval为500(即半秒钟),如果在Timer1_Tick()的多条代码中其中用了一条System.Threading.Thread.Sleep(2000);这样的语句,我想知道会发生何种情况。因为这条语句是延时两秒钟,而定时器本身的触发周期才半秒。请各位高手给解答解答,谢谢。
自已试就知了。
我可以明确告诉你:
timer 是计时,是通过计算机系统的时间差的。
实际上,主线程sleep 了,就放弃了主动权,就算计算机到了时间,也无法触发tick事件。tick事件是主线程的,tick 中如有sleep function 也会打断主线程。
结果,不用我说了吧, 当2秒后,主线程得到控制权时,发现自已的定时器已超时,马上响应。
时间t > 2000毫秒。大约是2001 毫秒!
//就贴出我的代码吧!
public Timer t;
public Stopwatch sw;private void Button1_Click(object sender, EventArgs e)
{
if (sw == null)
{
sw = new Stopwatch();
}
if (t == null)
{
t = new Timer();
t.Interval = 500;
t.Tick += new EventHandler(t_Tick);
}
t.Start();
sw.Reset();//时
sw.Start();
System.Threading.Thread.Sleep(2000);
}
void t_Tick(object sender, EventArgs e)
{
t.Stop();
sw.Stop();
MessageBox.Show("0.5定时器,实际时间是:" + sw.ElapsedMilliseconds.ToString() + "毫秒", "Information");
}
只要 你的理解与运行结果相一致,谁敢说你的理解是错的。--果有人这么说,这个人就是太自负了!
也只有经过自已主观的理解,自已的技术才会提升!所以, 每个人的思维不同,每个人的大脑最灵活的地方(开发最好之处)不同。
他人的理解不一定适合自已的,so 以运算结果为基准 + 自已的主观理解 === 好处最大化!
相信自已,绝对OK!