WinForm计时器控件


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

1. System.Windows.Forms.Timer

说明 Windows应用程序 独占一个线程 可以修改UI元素,基于UI的
如果是Windows应用程序,首选计时器System.Windows.Forms.Timer

① 属性
interval 时间间隔 ms 1000ms=1s
② 事件 tick
③ 应用:动态时间显示

//每隔指定的时间间隔就会触发
  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;	//启动计时器
   }

如果单次执行时间超过间隔时间,会影响下次触发。精度很差。

2. 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失去响应 不会影响下一次的触发

3. 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()来实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值