private void MonitorPagesThread(string key, int startDelayMs = 0, int?monitoringDelayMs = null) { if (startDelayMs > 0) { Thread.Sleep(startDelayMs); } monitoringDelayMs = (monitoringDelayMs.HasValue ? monitoringDelayMs : Monitoring.Count() * MonitoringWaitDelayMS); while (!Terminate && Monitoring.Get(key).Contains(Subreddit)) { List <string> oldList = pages; List <string> newList = GetPages(); if (Lists.ListDiff(oldList, newList, out List <string> added, out List <string> removed)) { // Event handler to alert the calling app that the list has changed. --Kris WikiPagesUpdateEventArgs args = new WikiPagesUpdateEventArgs { NewPages = newList, OldPages = oldList, Added = added, Removed = removed }; OnPagesUpdated(args); } Thread.Sleep(monitoringDelayMs.Value); } }
// When a new wiki page is detected in MonitorPages, this method will add it/them to the list. --Kris private void C_PagesUpdated(object sender, WikiPagesUpdateEventArgs e) { foreach (string page in e.Added) { if (!Pages.ContainsKey(page)) { Pages.Add(page, true); } } }
private void MonitorPagesThread(string key, int startDelayMs = 0, int?monitoringDelayMs = null) { if (startDelayMs > 0) { Thread.Sleep(startDelayMs); } monitoringDelayMs = (monitoringDelayMs.HasValue ? monitoringDelayMs : Monitoring.Count() * MonitoringWaitDelayMS); while (!Terminate && Monitoring.Get(key).Contains(Subreddit)) { if (MonitoringExpiration.HasValue && DateTime.Now > MonitoringExpiration.Value) { MonitorModel.RemoveMonitoringKey(key, Subreddit, ref Monitoring); Threads.Remove(key); break; } while (!IsScheduled()) { if (Terminate) { break; } Thread.Sleep(15000); } if (Terminate) { break; } List <string> oldList; List <string> newList; try { oldList = pages; newList = GetPages(); if (Lists.ListDiff(oldList, newList, out List <string> added, out List <string> removed)) { // Event handler to alert the calling app that the list has changed. --Kris WikiPagesUpdateEventArgs args = new WikiPagesUpdateEventArgs { NewPages = newList, OldPages = oldList, Added = added, Removed = removed }; OnPagesUpdated(args); } } catch (Exception) when(!BreakOnFailure) { } Wait(monitoringDelayMs.Value); } }
internal virtual void OnPagesUpdated(WikiPagesUpdateEventArgs e) { PagesUpdated?.Invoke(this, e); }