Winfrom之定时器Timer

Winfrom中有3种定时器的用法
1、基于控件的定时器          : System.Windows.Forms.Timer  winfrom控件
2、基于线程控制的定时器    : System.Threading.Timer 基于线程
3、基于服务控制的定时器    : System.Timers.Timer  基于服务

区别:
   1、基于控件的定时器  是独占一个线程的  可以修改UI元素  使用Winfrom程序(首选)
         缺点:在Tick事件里面不能加载太多数据  会出现堵塞现象 导致下次触发 以及其他控件

   2、基于线程的定时器  不能直接修改UI元素,要通过委托的方法来修改UI元素
          优点:时间过长,也不会失去响应,不会影响下一次事件的触发


主要事件:Winfrom中的定时器  (Tick事件)
               线程中的定时器(Elapsed事件)
常用属性:控件.Enabled=false;//不启用定时器
     控件.Interval=1000;//触发的时间 1000毫秒=1秒 主要代码:
Winfrom的定时器:
开启加载:
  lblTime.Text = "当前时间为:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//获取当前时间
            DTime.Enabled = true;
在Tick事件中触发界面显示
 lblTime.Text = "当前时间为:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
线程定时器:
在加载界面中手动创建一个委托定时器
      System.Timers.Timer timer1 = new System.Timers.Timer();//手动创建一个线程定时器
            timer1.Interval = 1000;//定时时间设置为1秒
            timer1.Elapsed += timer1_Elapsed;
            timer1.Start();
----------------------------------------------
int count=0;//设置定时的次数
----------------------------------------------
在线程定时器的Elapsed事件中的

    count += 1;
            #region 修改UI元素  通过一个委托方法 来实现UI元素控制
            Action act = UpdataTime;//调用一个委托
            this.Invoke(act); //通过Invoke()完成 修改UI元素 --通过委托来修改UI元素
            #endregion

            if (count > 10)
            {
                System.Timers.Timer timer = (System.Timers.Timer)sender;
                timer.Stop();//停止
            }

委托方法:

    private void UpdataTime()//定义一个委托 
        {
            lblDt1.Text = DateTime.Now.ToString();
        }
主要代码图:

 

 


  

posted @ 2020-08-19 16:52  猎人7号  阅读(553)  评论(0编辑  收藏  举报