How to get CPU temperature in C#

By FoxLearn 7/1/2024 9:58:08 AM   296
To get the CPU temperature in C#, you can use WMI (Windows Management Instrumentation) to query sensor data.

This method is more native to Windows but may not always provide CPU temperature information depending on the system and hardware support.

Although not every motherboard includes a built-in temperature monitor, you can potentially retrieve this information if it's available through Windows Management Instrumentation (WMI). Specifically, you can query the MSAcpi_ThermalZoneTemperature class, which is commonly used for accessing CPU temperature data on some systems.

Additionally, the Win32_TemperatureProbe WMI class provides properties related to temperature sensors, which are essentially electronic thermometers. Most of the information provided by Win32_TemperatureProbe comes from the System Management BIOS (SMBIOS). However, real-time temperature readings for the CurrentReading property cannot be directly extracted from SMBIOS tables.

ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature");
ManagementObjectCollection objCollection = searcher.Get();

foreach (ManagementObject obj in objCollection)
{
     double temperature = Convert.ToDouble(obj["CurrentTemperature"].ToString());
     temperature = (temperature - 2732) / 10.0; // Convert to Celsius
     Console.WriteLine($"CPU Temperature: {temperature}°C");
}

This example queries the MSAcpi_ThermalZoneTemperature class in WMI, which is commonly used to retrieve CPU temperature information on some systems. It converts the temperature from Kelvin to Celsius and prints it.