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