public RepeatedCallbackData RequestRepeatedCallback(DateTime startTime, TimeSpan repeatTimeSpan, RepeatedTimeCallbackDelegate callback) { var data = new RepeatedCallbackData() { callback = callback, startTime = startTime, repeatTimeSpan = repeatTimeSpan, counter = 0 }; data.nextTriggerTime = startTime + repeatTimeSpan; if (!RepeatedCallbackSimulation(data, Time)) { RepeatedCallbacks.Add(data); } return(data); }
private bool RepeatedCallbackSimulation(RepeatedCallbackData data, DateTime currentTime) { var finished = false; while (data.nextTriggerTime <= currentTime) { if (data.callback(currentTime, data.counter)) { finished = true; break; } data.counter++; data.nextTriggerTime += data.repeatTimeSpan; } return(finished); }
public bool StopRepeatedCallback(RepeatedCallbackData data) { return(RepeatedCallbacks.Remove(data)); }