小筆記:Timer定時間隔時間操作,后面有時間再補充和完善:
public class TimingSvc { /// <summary> /// 定時器,執行定時任務 /// </summary> private static Timer m_Timer; static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();
private static int FlushTimeOut = 5000; private TimingSvc() { //初始化操作 TimeSpan timeSpan = new TimeSpan(20000); DateTime nextTime = DateTime.Now.AddMilliseconds(20000); timeSpan = nextTime.Subtract(DateTime.Now); m_Timer = new Timer(new TimerCallback(OnTimedEvent), null, (long)timeSpan.TotalMilliseconds, Timeout.Infinite); } public void Close() { m_log.LogEvent("定時任務停止."); m_Timer.Dispose(); } /// <summary> /// 定時任務的執行 /// </summary> protected void OnTimedEvent(object state) { //LogEvent("********開始執行定時任務********"); //開始執行,無限等待 m_Timer.Change(Timeout.Infinite, Timeout.Infinite); //執行任務邏輯,刷新數據 //TODO //下次間隔20s執行 DateTime nextTime = DateTime.Now.AddMilliseconds(20000); TimeSpan timeSpan = nextTime.Subtract(DateTime.Now); m_Timer.Change((long)timeSpan.TotalMilliseconds, Timeout.Infinite); return; } public void DoOperation() { //寫入加鎖 if (rwLock.TryEnterWriteLock(FlushTimeOut)) { try { //TODO BLL } catch (Exception ex) { LogError("賦值異常:" + ex.Message); } finally { rwLock.ExitWriteLock(); } } return; } }
待完善。。。。。。