public void Register(IImageSourceServiceListener listener) { if (listener == null) { throw new ArgumentNullException(nameof(listener)); } if (listeners.Contains(listener)) { throw new InvalidOperationException(); } if (listeners.Count == 0) { Debug.Assert(imageIterator == null); imageIterator = new ImageIterator(backgroundImageSettings.IsRandom); backgroundImageSettings.SettingsChanged += BackgroundImageSettings_SettingsChanged; themeService.ThemeChangedLowPriority += ThemeService_ThemeChangedLowPriority; OnSettingsChanged(); } listeners.Add(listener); if (enabled) { listener.OnEnabled(); listener.OnSettingsChanged(); } }
public void Unregister(IImageSourceServiceListener listener) { if (listener == null) { throw new ArgumentNullException(nameof(listener)); } int index = listeners.IndexOf(listener); if (index < 0) { throw new ArgumentException(); } listeners.RemoveAt(index); if (listeners.Count == 0) { DisposeTimer(); backgroundImageSettings.SettingsChanged -= BackgroundImageSettings_SettingsChanged; themeService.ThemeChangedLowPriority -= ThemeService_ThemeChangedLowPriority; Debug.Assert(imageIterator != null); imageIterator.Dispose(); imageIterator = null; } }