C# 三种Timer组件的区别

  timer计时器,每隔间隔的时间就会触发事件。
  
  1. System.Windows.Forms.Timer  
      --应用于Windows应用程序,基于UI,独占一个线程。
      --属性  interval:时间间隔  ms
      --事件  Tick事件,如果在此事件中执行的任务过多,会发生阻塞。
      --应用  主要应用修改UI元素(窗体的窗体属性)
      --注意事项  如果单次执行时间超过设置的间隔时间,会影响下次触发,精度较差。

  2. System.Timers.Timer   基于服务
      --轻量级的计时器,每隔间隔时间,触发Elapsed事件,可加载成控件使用,也可以利用代码使用(System.Timers.Timer timer2 = new System.Timers.Timer()).
      --应用:服务器,获取数据。
      --局限:不可以修改UI元素,但可以通过UI元素this.invoke(action)调用委托修改UI元素。
      --属性:timer2.interval =1000;timer2.AutoReset = false;//只会印发一次就停止了。
      --事件: timer2.Elapsed += Timer_Elapsed;
      --启动:timer2.start();
      --停止:timer2.stop();
      --优点:如果事件里单次执行了耗时的操作,不会使UI失去响应,不会影响下一次触发。


  3. System.Threading.Timer  基于线程
      
      --轻量级的计时器,每隔间隔时间,回调方法执行操作,可加载成控件使用,也可以利用代码使用。
      --回调方法原型:public Timer(TimerCallback callback,object state,int dueTime,int period);
    参数1(state):要使用信息的对象或者设为null;
    参数2(dueTime):延迟启动的时间,单位ms;
    参数3(period): 时间间隔,ms,period 时间间隔 设置为0或者-1,只会执行一次;Change方法可以让计时器重新启动。       
      --demo
    System.Threading.Timer timer3 = new System.Threading.Timer(new System.Threading.TimerCallback(o=>{
     count2+=2;
     Action<int> act = ShowCount;//定义委托
     this.Invoke(act,count2);
    
     }),null,0,1000);
         
    private void ShowCount(int count)
    {
        txtCount.Text = count.ToString();
    }
         
      --对线程池线程执行方法的机制,也就是基于多线程的,精度比较高。
      --优点:如果事件里单次执行了耗时的操作,不会使UI失去响应,不会影响下一次触发。
      --方法:timer3.Chang(2000,2000);//改变延迟启动时间和时间间隔。
      --停止:timer3.Dispose();
      --局限:不可以修改UI元素,但可以通过UI元素this.invoke(action)调用委托修改UI元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值