private void TimerElapsed(object sender, EventArgs e) { Linn.Timer t = sender as Linn.Timer; List <Scheduler.DCallback> callbacks = null; lock (iLock) { // get the timer foreach (KeyValuePair <Linn.Timer, List <Scheduler.DCallback> > item in iScheduledEvents) { if (item.Key.Interval == t.Interval) { callbacks = item.Value; iScheduledEvents.Remove(item.Key); item.Key.Dispose(); break; } } } if (callbacks != null) { foreach (Scheduler.DCallback callback in callbacks) { iScheduler.Schedule(callback); } } }
public void Schedule(uint aInterval, Scheduler.DCallback aCallback) { lock (iLock) { // check existing timers foreach (KeyValuePair <Linn.Timer, List <Scheduler.DCallback> > item in iScheduledEvents) { if (item.Key.Interval == aInterval) { item.Value.Add(aCallback); return; } } // add a new timer Linn.Timer t = new Linn.Timer(); t.AutoReset = false; t.Interval = aInterval; t.Elapsed += TimerElapsed; t.Start(); List <Scheduler.DCallback> list = new List <Scheduler.DCallback>(); list.Add(aCallback); iScheduledEvents.Add(t, list); } }