现在的位置: 首页 > 综合 > 正文

时间管理器,时钟

2017年11月26日 ⁄ 综合 ⁄ 共 2498字 ⁄ 字号 评论关闭

一个时钟程序,利用线程把计算时间走动,比PC机中的时钟要准确。

    /// <summary>
    /// 时间管理器
    /// </summary>
    public sealed class TimerManager
    {
        private static Timer _Timer;

        private static bool _IsStarted;

        private static DateTime _DateTime;

        static TimerManager()
        {
            TimerManager._Timer = null;
            TimerManager._DateTime = DateTime.Now;
            TimerManager._IsStarted = false;
        }

        /// <summary>
        /// 检查时间管理器是否在正常工作
        /// </summary>
        public static bool IsStarted
        {
            get
            {
                return TimerManager._IsStarted;
            }
        }

        /// <summary>
        /// 检查时间管理器处于静止中异常!
        /// </summary>
        private static void CheckIsNotStarted()
        {
            if (!TimerManager._IsStarted)
            {
                throw new TimerException("时间管理器处于静止中异常!");
            }
        }

        /// <summary>
        /// 检查时间管理器处于运行中异常!
        /// </summary>
        private static void CheckIsStarted()
        {
            if (TimerManager._IsStarted)
            {
                throw new TimerException("时间管理器处于运行中异常!");
            }
        }

        /// <summary>
        /// 关闭时间管理器
        /// </summary>
        public static void Dispose()
        {
            TimerManager.CheckIsNotStarted();
            TimerManager._IsStarted = false;
            TimerManager._Timer.Dispose();
        }

        /// <summary>
        /// 格式化时间
        /// </summary>
        /// <param name="datetime">时间参数</param>
        /// <returns>返回格式后的时间</returns>
        private static DateTime FormatDateTime(DateTime datetime)
        {
            return new DateTime(datetime.Year, datetime.Month, datetime.Day, datetime.Hour, datetime.Minute, datetime.Second, datetime.Kind);
        }
        /// <summary>
        /// 时间器运行回调函数
        /// </summary>
        /// <param name="state">回调方法要使用的信息的对象</param>
        private static void RunTimer(object state)
        {
            TimerManager._DateTime = TimerManager._DateTime.AddSeconds(1);
        }

        /// <summary>
        /// 启动时间管理器
        /// </summary>
        /// <param name="datetime">输入当前需要管理的时间</param>
        public static void StartManager(DateTime datetime)
        {
            TimerManager.CheckIsStarted();
            TimerManager._IsStarted = true;
            TimerManager._DateTime = TimerManager.FormatDateTime(datetime);
            TimerManager._Timer = new Timer(new TimerCallback(TimerManager.RunTimer), null, 0x3e7 - datetime.Millisecond, 0x3e8);
        }

        /// <summary>
        /// 获取当前时间
        /// </summary>
        public static DateTime CurrentDateTime
        {
            get
            {
                TimerManager.CheckIsNotStarted();
                return TimerManager._DateTime;
            }
        }

        /// <summary>
        /// 获取当前日子结束的时间
        /// </summary>
        public static DateTime DayEnd
        {
            get
            {
                TimerManager.CheckIsNotStarted();
                return new DateTime(TimerManager._DateTime.Year, TimerManager._DateTime.Month, TimerManager._DateTime.Day, 0x17, 0x3b, 0x3b, TimerManager._DateTime.Kind);
            }
        }

        /// <summary>
        /// 获取当前日子开始的时间
        /// </summary>
        public static DateTime DayStart
        {
            get
            {
                TimerManager.CheckIsNotStarted();
                return new DateTime(TimerManager._DateTime.Year, TimerManager._DateTime.Month, TimerManager._DateTime.Day, 0, 0, 0, TimerManager._DateTime.Kind);
            }
        }
    }


    /// <summary>
    /// 时间管理器错误异常类型
    /// </summary>
    public sealed class TimerException : Exception
    {
        /// <summary>
        /// 时间轴管理器异常
        /// </summary>
        /// <param name="message">错误信息</param>
        public TimerException(string message)
            : base(message)
        {
        }
    }

【上篇】
【下篇】

抱歉!评论已关闭.