• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C#——计时器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

C# 的计时器是通过多线程来实现的。主要思路是,创建一个做死循环的线程,让该线程周期性的委托UI线程

法一:利用system.Timers命名空间下的Timer类,使用Elapsed事件另开一个线程(Timer类中的Interval方法可以循环触发Elapsed事件)

 1  private void Form1_Load(object sender, EventArgs e)
 2         { 
 4             /////////*******system.Timers命名空间下的Timer类,使用Elapsed事件另开一个线程*******/////////
 5             System.Timers.Timer TimersTime = new System.Timers.Timer();
 6             TimersTime.Elapsed += new ElapsedEventHandler(TimedLabelOne);
 7             TimersTime.Interval = 1000;
 8             TimersTime.Start();//aTimer.Enabled = true;
10         }

 Elapsed事件中运行的方法

  private void TimedLabelOne(object source, ElapsedEventArgs e)
        {
            time1.BeginInvoke(new TimeClock(TimeClocks1));
        }
        public delegate void TimeClock();//创建委托
  public void TimeClocks1()
        {
            time1.Text = DateTime.Now.ToString("HH:mm:ss");
        }

方法二:利用System.Threading.Timer类

 

 
        private void Form1_Load(object sender, EventArgs e)
        {
               // 参数:
        //   callback:
        //     一个 System.Threading.TimerCallback 委托,表示要执行的方法。
        //
        //   state:
        //     一个包含回调方法中,要使用信息的对象或 null。
        //
        //   dueTime:
        //     在之前的延迟时间量 callback 调用,以毫秒为单位。 指定 System.Threading.Timeout.Infinite 以防止启动计时器。
        //     指定零 (0) 可立即启动计时器。
        //
        //   period:
        //     调用之间的时间间隔 callback, ,以毫秒为单位。 指定 System.Threading.Timeout.Infinite 可以禁用定期终止。
  System.Threading.Timer ThreadingTime = new System.Threading.Timer(new TimerCallback(TimedLabelTwo),null,Timeout.Infinite,1000);
 //     更改计时器的启动时间和方法调用之间的间隔,用 32 位有符号整数度量时间间隔。
        //
        // 参数:
        //   dueTime:
        //     延迟之前调用的回调方法时指定的时间量 System.Threading.Timer 构造的以毫秒为单位。 指定 System.Threading.Timeout.Infinite
        //     以防止计时器重新启动。 指定零 (0) 可立即重新启动计时器。
        //
        //   period:
        //     回调方法的调用之间的时间间隔时指定 System.Threading.Timer 构造的以毫秒为单位。 指定 System.Threading.Timeout.Infinite
        //     可以禁用定期终止。
            ThreadingTime.Change(0, 1000);

        }

 

 

//委托UI线程给控件赋值
 public delegate void TimeClock();  
private void TimedLabelTwo(object state)
        {
            time1.BeginInvoke(new TimeClock(TimeClocks2));
        }
 public void TimeClocks2()
        {
            time2.Text = DateTime.Now.ToString("HH:mm:ss");
        }

 

法三:通过自己创建的线程循环调用自制的事件

        public delegate void TimeHandle(object sender);
        public event TimeHandle TimeSelf;
        private void Form1_Load(object sender, EventArgs e)
        {
            TimeSelf += new TimeHandle(TimedLabelThree);
            ThreadStart threadState = TimeRefresh;
            Thread thread = new Thread(threadState);
            thread.Start();

        }
        public void TimeRefresh()
        {    
            while(true)
            {
                TimeSelf(this);
                Thread.Sleep(1000);
            }                       
        }
        private void TimedLabelThree(object state)
        {
            label1.BeginInvoke(new TimeClock(TimeClocks3));
        }
        public delegate void TimeClock();
public void TimeClocks3() { label1.Text = DateTime.Now.ToString("HH:mm:ss"); }

 

法四:创建一个死循环的线程,周期性的委托UI线程里的控件

        private void Form1_Load(object sender, EventArgs e)
        {
            ThreadStart threadStart = test;
            Thread thread1 = new Thread(threadStart);
            thread1.Start();
        }
        public void test()
        {
            while(true)
            {
                label2.BeginInvoke(new TimeClock(TimeClocks4));
                Thread.Sleep(1000);
            }           
        }
        public delegate void TimeClock();
        public void TimeClocks4()
        {
            label2.Text = DateTime.Now.ToString("HH:mm:ss");
        }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用TinyPNG提供的API,对图片进行压缩(C#)发布时间:2022-07-10
下一篇:
【转】c#调用windowsAPI(user32.dll)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap