Nick Babcock 993dadd4dd Impose WMI timeouts (#444)
WMI queries do not have a timeout by default and can subsequently hang.
This commit adds timeouts to avoid these hangs.

On timeout, `Get` will throw a `ManagementException` that has an error
code of `ManagementStatus.Timedout`. In the case of abstract storage,
this exception will be silently swallowed and the statistics from WMI
not updated until the next update interval, which seems appropriate.

The storage group, on the other hand, a timeout there would cause an
initialization exception which would be propagated up to the caller
(which seems ok as something must be terribly wrong for that WMI query
to fail).

The code was also updated to call dispose for all the WMI objects. I
don't see this causing a behavior difference, but I found it better to
be safe than sorry.

The timeouts were chosen to be a compromise between returning in a
reasonable timeframe and allowing WMI, which can be terribly slow, to
return the query.
2021-05-14 09:24:50 +02:00
2021-05-08 10:21:14 +02:00
2021-01-23 12:06:17 +01:00
2019-09-23 19:29:10 +02:00
2019-09-23 19:29:10 +02:00
2021-02-09 15:08:22 +01:00
2020-11-20 09:34:02 +01:00
2021-01-23 12:06:06 +01:00
2021-02-09 15:26:34 +01:00

LibreHardwareMonitor

GitHub license Nuget Nuget (with prereleases) Nuget

Libre Hardware Monitor, a fork of Open Hardware Monitor, is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of your computer.

What's included?

Name .NET Build Status
LibreHardwareMonitor
Windows Forms based application that presents all data in a graphical interface
.NET Framework 4.5.2 Build status
LibreHardwareMonitorLib
Library that allows you to use all features in your own application
.NET Framework 4.5.2,
.NET Standard 2.0,
.NET 5.0.0
Build status

What can you do?

With the help of LibreHardwareMonitor you can read information from devices such as:

  • Motherboards
  • Intel and AMD processors
  • NVIDIA and AMD graphics cards
  • HDD, SSD and NVMe hard drives
  • Network cards

Where can I download it?

You can download the latest release here.
If you're signed in to GitHub, you can also download the latest builds here. Click on a result and download Binaries under Artifacts.

How can I help improve it?

The LibreHardwareMonitor team welcomes feedback and contributions!
You can check if it works properly on your motherboard. For many manufacturers, the way of reading data differs a bit, so if you notice any inaccuracies, please send us a pull request. If you have any suggestions or improvements, don't hesitate to create an issue.

What's the easiest way to start?

LibreHardwareMonitor application:

  1. Download the repository and compile 'LibreHardwareMonitor'.
  2. You can start the application immediately.

Sample code:

  1. Download the repository and compile 'LibreHardwareMonitorLib'.
  2. Add references to 'LibreHardwareMonitorLib.dll' and 'HidSharp.dll' in your project.
  3. In your main file, add namespace 'using LibreHardwareMonitor.Hardware;'
  4. Now you can read most of the data from your devices.
/*
 * Example for .NET Framework
 */
public class UpdateVisitor : IVisitor
{
    public void VisitComputer(IComputer computer)
    {
        computer.Traverse(this);
    }
    public void VisitHardware(IHardware hardware)
    {
        hardware.Update();
        foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this);
    }
    public void VisitSensor(ISensor sensor) { }
    public void VisitParameter(IParameter parameter) { }
}

public void Monitor()
{
    Computer computer = new Computer
    {
        IsCpuEnabled = true,
        IsGpuEnabled = true,
        IsMemoryEnabled = true,
        IsMotherboardEnabled = true,
        IsControllerEnabled = true,
        IsNetworkEnabled = true,
        IsStorageEnabled = true
    };

    computer.Open();
    computer.Accept(new UpdateVisitor());

    foreach (IHardware hardware in computer.Hardware)
    {
        Console.WriteLine("Hardware: {0}", hardware.Name);
        
        foreach (IHardware subhardware in hardware.SubHardware)
        {
            Console.WriteLine("\tSubhardware: {0}", subhardware.Name);
            
            foreach (ISensor sensor in subhardware.Sensors)
            {
                Console.WriteLine("\t\tSensor: {0}, value: {1}", sensor.Name, sensor.Value);
            }
        }

        foreach (ISensor sensor in hardware.Sensors)
        {
            Console.WriteLine("\tSensor: {0}, value: {1}", sensor.Name, sensor.Value);
        }
    }
    
    computer.Close();
}

License

LibreHardwareMonitor is free and open source software licensed under MPL 2.0. You can use it in private and commercial projects. Keep in mind that you must include a copy of the license in your project.

S
Description
ReLibreHardwareMonitor, home of the fork of LibreHardwareMonitor
Readme MPL-2.0
14 MiB
v0.1.0
Latest
2026-06-12 17:05:48 +00:00
Languages
C# 97.6%
JavaScript 2.2%
HTML 0.1%