所以_count 结果每次只输出一次、

时间:2021-07-05 06:19:14

System.Timers.Timer 

  基于处事

  非梗阻异步

  多线程

/// <summary> /// windows按时器 /// </summary> System.Windows.Forms.Timer _wTimer; /// <summary> /// 应用措施生成按时器 /// </summary> System.Timers.Timer _tTimer; private void Form1_Load(object sender, EventArgs e) { _wTimer = new System.Windows.Forms.Timer(); _wTimer.Interval = 500;//设置时间间隔500毫秒 _wTimer.Tick += _wTimer_Tick; _wTimer.Start();//启动按时器 _tTimer = new System.Timers.Timer(); _tTimer.Interval = 500;//设置时间间隔500毫秒 _tTimer.Elapsed += _tTimer_Elapsed; //_tTimer.Start(); } void _tTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Print("_tTimer_Elapsed" + _count.ToString()); Thread.Sleep(2000);//休眠2秒 _count++; } void _wTimer_Tick(object sender, EventArgs e) { Print("_wTimer_Tick" + _count.ToString()); Thread.Sleep(2000);//休眠2秒 _count++; } private void Print(string msg) { if (this.InvokeRequired) { this.BeginInvoke((Action)delegate() { textBox1.AppendText(msg + "\r\n"); }); } else { textBox1.AppendText(msg + "\r\n"); } }

当启动_wTimer.Start(),输出功效。在_wTimer_Tick 休眠2秒梗阻主线程,导致措施假死2秒。而且事件没在没有措置惩罚惩罚完成不会进行下次,所以_count 功效每次只输出一次、

所以_count 结果每次只输出一次、

当启动_tTimer.Start(),,每隔500毫秒添加一个线程。由于异步只要达到时间间隔则自动生成下个线程,不管上个线程是否措置惩罚惩罚完成。

所以_count的功效会有多次输出。

所以_count 结果每次只输出一次、

如果想解决 system.timers 没到时间间隔只生成一个线程或者说上次没有措置惩罚惩罚完下次则期待措置惩罚惩罚可以在措置惩罚惩罚前添加_tTimer.stop(),完成后再次启动_tTimer.start()。