private bool EnsureValidTimer(BitsTimer timer, out TimerDetails details) { if (timerDetailsDictionary.ContainsKey(timer.Name) && timerDetailsDictionary[timer.Name] != null) { details = timerDetailsDictionary[timer.Name]; } else { log.WarnFormat("Timer details are not found ({0}). Removing timer from collection.", timer.Name); TryRemoveTimer(timer); details = null; return false; } return true; }
private void TryRemoveTimer(BitsTimer timer) { lock (s_lock) { if (timerDictionary.ContainsValue(timer)) { bool ifFound = false; foreach (string key in timerDictionary.Keys) { if (timerDictionary[key].Equals(timer)) { timerDictionary.Remove(key); ifFound = true; } if (ifFound) log.InfoFormat("Timer removed from timerCollection ({0})", timer.Name); else log.WarnFormat("Timer not removed from timerCollection ({0})", timer.Name); } } else log.WarnFormat("Timer not removed from timersCollection ({0})", timer.Name); } }
public void AddTimer(IJob job, TimerDetails detail, bool autoStart) { ElapsedEventHandler elapsedEventHandler = new ElapsedEventHandler(EventReceivedHandler); //define timer BitsTimer timer = null; if (!timerDictionary.ContainsKey(detail.Key)) { timer = new BitsTimer(); timer.BeginInit(); timer.AutoReset = detail.IfAutoReset; timer.Enabled = detail.IfEnabled && !detail.IsJamsEnabled; timer.Interval = detail.Interval; timer.Name = detail.JobName; timer.ScheduledTime = GetUniqueTime(timerDictionary, detail.RunTime); timer.WeeklySchedule = detail.WeeklySchedule; timer.Elapsed += elapsedEventHandler; timer.EndInit(); lock (s_lock) { timerDictionary[detail.Key] = timer; timerDictionary[detail.Key] = timer; timerDetailsDictionary[detail.JobName] = detail; } timerDictionary[detail.Key].Start(); } else timer = timerDictionary[detail.Key]; if (detail.JobName == null) detail.JobName = "GenericTimer"; if (job != null) TimeManager.InstanceOf().timerJobs[timer.ToString()] = job.JobName; log.InfoFormat(@"Timer {0} created", timer.ToString()); }