diff --git a/LibreHardwareMonitor/UI/MainForm.cs b/LibreHardwareMonitor/UI/MainForm.cs index 1c02d5e..3678df3 100644 --- a/LibreHardwareMonitor/UI/MainForm.cs +++ b/LibreHardwareMonitor/UI/MainForm.cs @@ -375,7 +375,6 @@ namespace LibreHardwareMonitor.UI private void PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs eventArgs) { - if (eventArgs.Mode == Microsoft.Win32.PowerModes.Resume) { _computer.Reset(); @@ -618,14 +617,12 @@ namespace LibreHardwareMonitor.UI private void NodeTextBoxText_EditorShowing(object sender, CancelEventArgs e) { - e.Cancel = !(treeView.CurrentNode != null && - (treeView.CurrentNode.Tag is SensorNode || - treeView.CurrentNode.Tag is HardwareNode)); + e.Cancel = !(treeView.CurrentNode != null && (treeView.CurrentNode.Tag is SensorNode || treeView.CurrentNode.Tag is HardwareNode)); } private void NodeCheckBox_IsVisibleValueNeeded(object sender, NodeControlValueEventArgs e) { - e.Value = (e.Node.Tag is SensorNode node) && plotMenuItem.Checked; + e.Value = e.Node.Tag is SensorNode && plotMenuItem.Checked; } private void ExitClick(object sender, EventArgs e) @@ -636,6 +633,7 @@ namespace LibreHardwareMonitor.UI private void Timer_Tick(object sender, EventArgs e) { _computer.Accept(_updateVisitor); + treeView.Invalidate(); _plotPanel.InvalidatePlot(); _systemTray.Redraw(); diff --git a/LibreHardwareMonitorLib/Hardware/Computer.cs b/LibreHardwareMonitorLib/Hardware/Computer.cs index d9a1dde..291ae89 100644 --- a/LibreHardwareMonitorLib/Hardware/Computer.cs +++ b/LibreHardwareMonitorLib/Hardware/Computer.cs @@ -12,7 +12,7 @@ using System.Security.Permissions; using LibreHardwareMonitor.Hardware.Controller.AeroCool; using LibreHardwareMonitor.Hardware.Controller.AquaComputer; using LibreHardwareMonitor.Hardware.Controller.Heatmaster; -using LibreHardwareMonitor.Hardware.Controller.Nzxt; +using LibreHardwareMonitor.Hardware.Controller.Nzxt; using LibreHardwareMonitor.Hardware.Controller.TBalancer; using LibreHardwareMonitor.Hardware.Gpu; using LibreHardwareMonitor.Hardware.Memory; @@ -29,6 +29,7 @@ namespace LibreHardwareMonitor.Hardware private bool _controllerEnabled; private bool _cpuEnabled; private bool _gpuEnabled; + private readonly object _lock = new object(); private bool _memoryEnabled; private bool _motherboardEnabled; private bool _networkEnabled; @@ -46,18 +47,19 @@ namespace LibreHardwareMonitor.Hardware _settings = settings ?? new Settings(); } - public IHardware[] Hardware + public IList Hardware { get { - List list = new List(); - foreach (IGroup group in _groups) + lock (_lock) { - foreach (IHardware hardware in group.Hardware) - list.Add(hardware); - } + List list = new List(); - return list.ToArray(); + foreach (IGroup group in _groups) + list.AddRange(group.Hardware); + + return list; + } } } @@ -218,8 +220,10 @@ namespace LibreHardwareMonitor.Hardware public string GetReport() { - using (StringWriter w = new StringWriter(CultureInfo.InvariantCulture)) + lock (_lock) { + using StringWriter w = new StringWriter(CultureInfo.InvariantCulture); + w.WriteLine(); w.WriteLine(nameof(LibreHardwareMonitor) + " Report"); w.WriteLine(); @@ -251,6 +255,7 @@ namespace LibreHardwareMonitor.Hardware NewSection(w); w.WriteLine("Sensors"); w.WriteLine(); + foreach (IGroup group in _groups) { foreach (IHardware hardware in group.Hardware) @@ -262,6 +267,7 @@ namespace LibreHardwareMonitor.Hardware NewSection(w); w.WriteLine("Parameters"); w.WriteLine(); + foreach (IGroup group in _groups) { foreach (IHardware hardware in group.Hardware) @@ -299,20 +305,26 @@ namespace LibreHardwareMonitor.Hardware public void Traverse(IVisitor visitor) { - foreach (IGroup group in _groups) + lock (_lock) { - foreach (IHardware hardware in group.Hardware) - hardware.Accept(visitor); + foreach (IGroup group in _groups) + { + foreach (IHardware hardware in group.Hardware) + hardware.Accept(visitor); + } } } private void Add(IGroup group) { - if (_groups.Contains(group)) - return; + lock (_lock) + { + if (_groups.Contains(group)) + return; - _groups.Add(group); + _groups.Add(group); + } if (HardwareAdded != null) { @@ -323,11 +335,16 @@ namespace LibreHardwareMonitor.Hardware private void Remove(IGroup group) { - if (!_groups.Contains(group)) - return; + lock (_lock) + { + if (!_groups.Contains(group)) + return; + + + _groups.Remove(group); + } - _groups.Remove(group); if (HardwareRemoved != null) { foreach (IHardware hardware in group.Hardware) @@ -340,10 +357,14 @@ namespace LibreHardwareMonitor.Hardware private void RemoveType() where T : IGroup { List list = new List(); - foreach (IGroup group in _groups) + + lock (_lock) { - if (group is T) - list.Add(group); + foreach (IGroup group in _groups) + { + if (group is T) + list.Add(group); + } } foreach (IGroup group in list) @@ -423,6 +444,7 @@ namespace LibreHardwareMonitor.Hardware { w.WriteLine("{0}|", space); w.WriteLine("{0}+- {1} ({2})", space, hardware.Name, hardware.Identifier); + ISensor[] sensors = hardware.Sensors; Array.Sort(sensors, CompareSensor); @@ -437,8 +459,10 @@ namespace LibreHardwareMonitor.Hardware { w.WriteLine("{0}|", space); w.WriteLine("{0}+- {1} ({2})", space, hardware.Name, hardware.Identifier); + ISensor[] sensors = hardware.Sensors; Array.Sort(sensors, CompareSensor); + foreach (ISensor sensor in sensors) { string innerSpace = space + "| "; @@ -446,6 +470,7 @@ namespace LibreHardwareMonitor.Hardware { w.WriteLine("{0}|", innerSpace); w.WriteLine("{0}+- {1} ({2})", innerSpace, sensor.Name, sensor.Identifier); + foreach (IParameter parameter in sensor.Parameters) { string innerInnerSpace = innerSpace + "| "; @@ -477,10 +502,13 @@ namespace LibreHardwareMonitor.Hardware return; - while (_groups.Count > 0) + lock (_lock) { - IGroup group = _groups[_groups.Count - 1]; - Remove(group); + while (_groups.Count > 0) + { + IGroup group = _groups[_groups.Count - 1]; + Remove(group); + } } OpCode.Close(); @@ -502,10 +530,13 @@ namespace LibreHardwareMonitor.Hardware private void RemoveGroups() { - while (_groups.Count > 0) + lock (_lock) { - IGroup group = _groups[_groups.Count - 1]; - Remove(group); + while (_groups.Count > 0) + { + IGroup group = _groups[_groups.Count - 1]; + Remove(group); + } } } diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs index f98f9b2..14876cc 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs @@ -39,7 +39,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.AeroCool } } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public void Close() { diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs index 7d0bf50..c4da937 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs @@ -63,7 +63,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer } } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public void Close() { diff --git a/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs index 2de26a4..7ba0a1a 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs @@ -131,7 +131,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster } } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public string GetReport() { diff --git a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs index 5c9eec5..4349d58 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs @@ -51,7 +51,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt } } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public void Close() { diff --git a/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs index 3f50e41..9fa6dce 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs @@ -160,7 +160,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer } } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public string GetReport() { diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs b/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs index 858c8d8..faa2e2a 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs @@ -68,7 +68,7 @@ namespace LibreHardwareMonitor.Hardware.CPU } } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public string GetReport() { diff --git a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs index 81c1486..5311a32 100644 --- a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs @@ -103,7 +103,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu } } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public string GetReport() { diff --git a/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs b/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs index 795b35b..7f37984 100644 --- a/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs @@ -85,7 +85,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu _report.AppendLine(); } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public string GetReport() { diff --git a/LibreHardwareMonitorLib/Hardware/IComputer.cs b/LibreHardwareMonitorLib/Hardware/IComputer.cs index 7d82e68..07abe71 100644 --- a/LibreHardwareMonitorLib/Hardware/IComputer.cs +++ b/LibreHardwareMonitorLib/Hardware/IComputer.cs @@ -4,6 +4,8 @@ // Partial Copyright (C) Michael Möller and Contributors. // All Rights Reserved. +using System.Collections.Generic; + namespace LibreHardwareMonitor.Hardware { public delegate void HardwareEventHandler(IHardware hardware); @@ -16,7 +18,7 @@ namespace LibreHardwareMonitor.Hardware bool IsGpuEnabled { get; } - IHardware[] Hardware { get; } + IList Hardware { get; } bool IsStorageEnabled { get; } diff --git a/LibreHardwareMonitorLib/Hardware/IGroup.cs b/LibreHardwareMonitorLib/Hardware/IGroup.cs index 2b917a8..ac7e873 100644 --- a/LibreHardwareMonitorLib/Hardware/IGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/IGroup.cs @@ -10,7 +10,7 @@ namespace LibreHardwareMonitor.Hardware { internal interface IGroup { - IEnumerable Hardware { get; } + IReadOnlyList Hardware { get; } string GetReport(); diff --git a/LibreHardwareMonitorLib/Hardware/Memory/MemoryGroup.cs b/LibreHardwareMonitorLib/Hardware/Memory/MemoryGroup.cs index 52cb115..271893b 100644 --- a/LibreHardwareMonitorLib/Hardware/Memory/MemoryGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Memory/MemoryGroup.cs @@ -28,7 +28,7 @@ namespace LibreHardwareMonitor.Hardware.Memory return null; } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public void Close() { diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/MotherboardGroup.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/MotherboardGroup.cs index e6d0a0b..52c5dc6 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/MotherboardGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/MotherboardGroup.cs @@ -18,10 +18,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard _motherboards[0] = new Motherboard(smbios, settings); } - public IEnumerable Hardware - { - get { return _motherboards; } - } + public IReadOnlyList Hardware => _motherboards; public void Close() { diff --git a/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs b/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs index 75457dc..415e6a2 100644 --- a/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs @@ -26,10 +26,7 @@ namespace LibreHardwareMonitor.Hardware.Network NetworkChange.NetworkAvailabilityChanged += NetworkChange_NetworkAddressChanged; } - public IEnumerable Hardware - { - get { return _hardware; } - } + public IReadOnlyList Hardware => _hardware; public string GetReport() { diff --git a/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs b/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs index cffb153..c16109a 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs @@ -44,7 +44,7 @@ namespace LibreHardwareMonitor.Hardware.Storage mosDisks.Dispose(); } - public IEnumerable Hardware => _hardware; + public IReadOnlyList Hardware => _hardware; public string GetReport() {