• 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;
                        }
                    }
                }
            }
        }
    

      

  • 相关阅读:
    CentOS 6.2安装Darwin Streaming Server
    流媒体技术笔记(协议相关)
    流媒体技术笔记(视频编码相关)
    CentOS6.2下编译mpeg4ip
    用popen函数操作其它程序的输入和输出
    给centos6.2安装yum源
    启动新进程(fork和exec系列函数实现)
    扩展Asterisk1.8.7的Dialplan Applications
    源码安装ffmpeg(带libx264)
    扩展Asterisk1.8.7的AMI接口
  • 原文地址:https://www.cnblogs.com/sanday/p/6973939.html
Copyright © 2020-2023  润新知