WindowForm计时器控件

Timer组件 Timer计时器 间隔时间 —每隔这个间隔时间就会引发事件

いち System.Windows.Forms.Timer
Windows应用程序 独占一个线程 可以修改UI元素,基于UI的
属性 interval 时间间隔 ms 1000ms=1s
事件 tick
应用:动态时间显示
如果是Windows应用程序,要使用计时器功能System.Windows.Forms.Timer 是首选。

//每隔指定的时间间隔就会触发
  private void timer1_Tick(object sender, EventArgs e)
   {
    
    
       lblDateTime.Text = DateTime.Now.ToString();
   }

   private void FrmTimer_Load(object sender, EventArgs e)
   {
    
    
       lblDateTime.Text = DateTime.Now.ToString();
       timer1.Enabled = true;	//启动计时器
   }

如果单次执行时间超过间隔时间,会影响下次触发。精度很差。
····························································································
に System.Timers.Timer
基于服务 计时器 轻量
时间间隔 触发 Elapsed事件 —执行操作 ----不是由UI线程执行的

属性
Interval 时间间隔
AutoReset false引发一次就停止 true默认
不可以直接修改UI元素,
可以通过UI元素的invoke()完成,委托里修改UI元素----修改UI元素

private void FrmTimer_Load(object sender, EventArgs e)
  {
    
    
      System.Timers.Timer timer3 = new System.Timers.Timer();
      timer3.Interval = 1000;
      //timer3.AutoReset = false;		//只会引发一次,就停止了
      timer3.Elapsed += Timer3_Elapsed; //事件
      timer3.Start(); 					//开启计时器
  }
  int count = 0; //触发次数的终点
  private void Timer3_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  {
    
    
	  //不能直接修改UI元素的内容
      //lblDt2.Text= DateTime.Now.ToString();
      count += 1;
	  //用委托来进行修改元素内容
      Action act = UpdateTime;
      this.Invoke(act);
      if(count >10)
      {
    
    
          System.Timers.Timer timer = (System.Timers.Timer)sender;
          timer.Stop();			//停止计时器
      }
  }
//委托方法
  private void UpdateTime()
  {
    
    
      lblDatatime.Text = DateTime.Now.ToString();
  }

耗时操作,不会使UI失去响应 不会影响下一次的触发

さん System.Threading.Timer
多线程 计时器 轻量级 精度高

提供以指定的时间间隔对线程池线程执行方法的机制。
单次运行过长,并不会影响下次的触发, 回调方法执行操作

//System.Threading.Timer timer4;     
 private void FrmTimer_Load(object sender, EventArgs e)
  {
    
    
      //多线程
      //period  时间间隔  0或-1 只会执行一 次,然后就停止
      //Change 可以让计时器重新启动
      //停止 ①period  0 -1   ②timer4.Dispose() 
      int count2 = 0;
      timer4 = new System.Threading.Timer(new System.Threading.TimerCallback(o => {
    
    
          count2 += 2;
          Action<int> act = ShowCount;
          this.Invoke(act, count2);
      }), null, 1000,1000);
	//参数 回调函数,执行对象,延迟启动时间,触发时间间隔
   //timer4.Change(2000, 2000);	//改变延迟启动时间和时间间隔
  }
//委托函数
  private void ShowCount(int cout)
  {
    
    
      txtCount.Text = cout.ToString();
      if (cout > 50)
          timer4.Dispose();
  }

不可以直接修改UI元素,也不是由UI线程上运行,UI元素的invoke()来实现

猜你喜欢

转载自blog.csdn.net/asdasd1fdsyrt/article/details/109477081