時間管理器,時鐘

一個時鐘程序,利用線程把計算時間走動,比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)
        {
        }
    }





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章