zoukankan      html  css  js  c++  java
  • C# 定时器Timer

    static void Main(string[] args)
            {
                #region  定时器
                TimerDemo td = new TimerDemo("TimerDemo", 1000);
                td.Enabled = true;
                td.TickEvent += TestHandler;
                Thread timer = new Thread(td.Run);
                timer.Start();
                #endregion
                Console.ReadLine();
            }
    
            /// <summary>
            /// 测试用事件
            /// </summary>
            static void TestHandler()
            {
                Console.WriteLine(DateTime.Now.ToLongTimeString());
            }
    

      

    public class TimerDemo
        
        {
            //线程名
            string _ThreadName;
            public string ThreadName
            {
                get { return _ThreadName; }
                private set { _ThreadName = value; }
            }
            //时间间隔
            int _TimeInterval;
            public int TimeInterval
            {
                get { return _TimeInterval; }
                set { _TimeInterval = value; }
            }
            //当前计时器是否启用 true:启用 false:不启用
            bool _Enabled;
            public bool Enabled
            {
                get { return _Enabled; }
                set { _Enabled = value; }
            }
            //每隔一段时间需要运行的事件
            public delegate void TickEventHandler();
            public event TickEventHandler TickEvent;
            /// <summary>
            /// 建立一个计时器(构造函数)
            /// </summary>
            /// <param name="ThreadName">线程名</param>
            /// <param name="TimeInterval">时间间隔</param>
            public TimerDemo(string ThreadName, int TimeInterval = int.MaxValue)
            {
                this.ThreadName = ThreadName;
                this.TimeInterval = TimeInterval;
                this.Enabled = false;
            }
            /// <summary>
            /// 定期执行事件
            /// </summary>
            public void Run()
            {
                while (true)
                {
                    //如果当前计时器并未启用,则每隔一段时间检测是否被启用
                    if (!this.Enabled)
                    {
                        Thread.Sleep(100);
                        continue;
                    }
                    //触发事件TickEvent
                    if (TickEvent != null)
                    {
                        TickEvent();
                    }
                    //休眠一定的时间,等待下一个循环
                    Thread.Sleep(TimeInterval % 100);
                    for (int temp = 0; temp < TimeInterval / 100; temp++)
                    {
                        Thread.Sleep(100);
                        if (!this.Enabled)
                        {
                            break;
                        }
                    }
                }
            }
        }
    

      

  • 相关阅读:
    实验一
    MVVM Light Toolkit 学习
    配置mongodb分片群集(sharding cluster)
    【silverlight】web发布方法
    MongoDb数据库设计
    【解决方案】添加web服务失败:下载“http://localhost:2540/Service.asmx”时出错。无法生成***类型
    Codeforces #380 div2 C(729C) Road to Cinema
    Codeforces #380 div2 B(729B) Spotlights
    数据挖掘项目总结
    南方电网用电时间序列分析
  • 原文地址:https://www.cnblogs.com/sanday/p/6973939.html
Copyright © 2011-2022 走看看