diff --git a/RGB.NET.Core/Devices/AbstractRGBDeviceProvider.cs b/RGB.NET.Core/Devices/AbstractRGBDeviceProvider.cs index 630bf09..36bfa60 100644 --- a/RGB.NET.Core/Devices/AbstractRGBDeviceProvider.cs +++ b/RGB.NET.Core/Devices/AbstractRGBDeviceProvider.cs @@ -16,7 +16,9 @@ namespace RGB.NET.Core public virtual IEnumerable Devices { get; protected set; } = Enumerable.Empty(); - protected Dictionary UpdateTriggers { get; } = new(); + protected Dictionary UpdateTriggerMapping { get; } = new(); + + public ReadOnlyCollection<(int id, IDeviceUpdateTrigger trigger)> UpdateTriggers => new(UpdateTriggerMapping.Select(x => (x.Key, x.Value)).ToList()); #endregion @@ -49,7 +51,7 @@ namespace RGB.NET.Core Devices = new ReadOnlyCollection(GetLoadedDevices(loadFilter).ToList()); - foreach (IDeviceUpdateTrigger updateTrigger in UpdateTriggers.Values) + foreach (IDeviceUpdateTrigger updateTrigger in UpdateTriggerMapping.Values) updateTrigger.Start(); IsInitialized = true; @@ -81,8 +83,8 @@ namespace RGB.NET.Core protected virtual IDeviceUpdateTrigger GetUpdateTrigger(int id = -1, double? updateRateHardLimit = null) { - if (!UpdateTriggers.TryGetValue(id, out IDeviceUpdateTrigger? updaeTrigger)) - UpdateTriggers[id] = (updaeTrigger = CreateUpdateTrigger(id, updateRateHardLimit ?? _defaultUpdateRateHardLimit)); + if (!UpdateTriggerMapping.TryGetValue(id, out IDeviceUpdateTrigger? updaeTrigger)) + UpdateTriggerMapping[id] = (updaeTrigger = CreateUpdateTrigger(id, updateRateHardLimit ?? _defaultUpdateRateHardLimit)); return updaeTrigger; } @@ -91,9 +93,12 @@ namespace RGB.NET.Core protected virtual void Reset() { - foreach (IDeviceUpdateTrigger updateTrigger in UpdateTriggers.Values) + foreach (IDeviceUpdateTrigger updateTrigger in UpdateTriggerMapping.Values) updateTrigger.Dispose(); + foreach (IRGBDevice device in Devices) + device.Dispose(); + Devices = Enumerable.Empty(); IsInitialized = false; } @@ -108,13 +113,7 @@ namespace RGB.NET.Core protected virtual void OnException(Exception ex) => Exception?.Invoke(this, ex); - public virtual void Dispose() - { - IEnumerable devices = Devices; - Reset(); - foreach (IRGBDevice device in devices) - device.Dispose(); - } + public virtual void Dispose() => Reset(); #endregion } diff --git a/RGB.NET.Core/Devices/IRGBDeviceProvider.cs b/RGB.NET.Core/Devices/IRGBDeviceProvider.cs index afa4ab0..2d04e5d 100644 --- a/RGB.NET.Core/Devices/IRGBDeviceProvider.cs +++ b/RGB.NET.Core/Devices/IRGBDeviceProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; namespace RGB.NET.Core { @@ -20,6 +21,8 @@ namespace RGB.NET.Core /// IEnumerable Devices { get; } + ReadOnlyCollection<(int id, IDeviceUpdateTrigger trigger)> UpdateTriggers { get; } + #endregion #region Events