/// <summary> /// Constructor /// </summary> /// <param name="period_ms"></param> /// <param name="type"></param> public MultimediaTimer(int period_ms) { this.Tick = 0; this.Period_ms = period_ms; // Define tick period this._TickPeriod = TimeSpan.FromMilliseconds(Period_ms); // save callback to prevent the garbage collector to release it this._LPTimerCallBack = m_LPTimerCallBack; }
/// <summary> /// Stop the timer /// </summary> /// <returns></returns> public bool Stop() { // Terminate multimedia time event int err = timeKillEvent(_TimerId); // release callbacks for garbage collector this._LPTimerCallBack = null; this.Handler = null; // Ensure all callbacks are drained before leaving to caller for (int i = 0; i < 10; i++) { Thread.Sleep(this.Period_ms); } // Restore OS granularity RestoreTickGranularityOnWindows(); return(err == 0); }
static protected extern int timeSetEvent(int delay, int resolution, _LPTimeCallbackType handler, IntPtr user, int eventType);