System.Windows.Forms.Timer MSDN上说这是个单线程组件,Tick的处理函数在主线程上执行的,有如下代码:public partial class Form1 : Form
{
int i = 0; public Form1()
{
InitializeComponent();
Thread.CurrentThread.Name = "1";
} private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show(Thread.CurrentThread.Name);
Thread.Sleep(50000000);
}
}timer1_Tick是Timer的Tick事件的处理函数,Timer每隔1000毫秒触发一次Tick
既然timer1_Tick是在主线程上执行的,内部要执行很长一段时间才结束,即主线程执行一次timer1_Tick函数要经过50000000毫秒,那为什么还是每隔1000毫秒,就弹出个MessageBox显示Thread.CurrentThread.Name的值?
{
int i = 0; public Form1()
{
InitializeComponent();
Thread.CurrentThread.Name = "1";
} private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show(Thread.CurrentThread.Name);
Thread.Sleep(50000000);
}
}timer1_Tick是Timer的Tick事件的处理函数,Timer每隔1000毫秒触发一次Tick
既然timer1_Tick是在主线程上执行的,内部要执行很长一段时间才结束,即主线程执行一次timer1_Tick函数要经过50000000毫秒,那为什么还是每隔1000毫秒,就弹出个MessageBox显示Thread.CurrentThread.Name的值?
计时器要求用户代码有一个可用的UI消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。
基于服务器的计时器是为在多线程环境下与辅助线程一起使用而设计的。
Windows计时器位于System.Windows.Forms命名空间
服务器计时器位于System.Timers命名空间
正因为Windows计时器是为单线程环境设计的,我才不明白第一次执行的timer1_Tick还没执行完,怎么第二次又开始了?这不是多线程计时器的特性吗?如果是单线程计时器不可能同时执行两个timer1_Tick函数吧?
可是没有SLEEP并不代表就Return了吧?单线程是顺序执行的,怎么会还没执行完老的timer1_Tick,又去执行新的timer1_Tick了呢?
看下7L和23L的回复