Maison  >  Article  >  développement back-end  >  Minuterie C#Introduction à un exemple de minuterie

Minuterie C#Introduction à un exemple de minuterie

零下一度
零下一度original
2017-06-23 16:13:423118parcourir
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;
                    }
                }
            }
        }
    }

  

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn