C# MSAcpi_热区温度等级未显示实际温度

C# MSAcpi_热区温度等级未显示实际温度,c#,C#,我想实时获取CPU性能数据,包括温度。我使用以下代码获取CPU温度: try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature"); foreach (Managemen

我想实时获取CPU性能数据,包括温度。我使用以下代码获取CPU温度:

try
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\WMI",
                "SELECT * FROM MSAcpi_ThermalZoneTemperature");

            foreach (ManagementObject queryObj in searcher.Get())
            {
                double temp = Convert.ToDouble(queryObj["CurrentTemperature"].ToString());
                double temp_critical = Convert.ToDouble(queryObj["CriticalTripPoint"].ToString());
                double temp_cel = (temp/10 - 273.15);
                double temp_critical_cel = temp_critical / 10 - 273.15;
                lblCurrentTemp.Text = temp_cel.ToString();
                lblCriticalTemp.Text = temp_critical_cel.ToString();
            }
        }
        catch (ManagementException e)
        {
            MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
        }
但此代码显示的温度不是正确的温度。它通常显示49.5-50.5摄氏度。但我使用了“OpenHardwareMonitor”,它报告CPU温度超过71摄氏度,并且随着时间分数的变化而变化。代码中有我遗漏的东西吗

我在timer_click事件中每隔500毫秒使用上述代码刷新温度读数,但它从执行开始就始终显示相同的温度。这意味着,如果您运行此应用程序,并且它显示49度,则在1小时的会话后,它将持续显示49度。问题出在哪里?

在中,我发现CurrentTemperature返回主板某个热区的温度。这意味着它返回的不是CPU温度。 这和厨房的温度是30摄氏度一样,但炉子的温度是200摄氏度左右。。。 这种方式无法显示CPU的精确温度。要获得CPU(和每个内核)的精确温度,您需要编写内核驱动程序,这要复杂得多


总之,你的代码做了它应该做的事情,为了测量温度,你需要使用其他方法。

queryObj[“ThermalStamp”]的值在调用之间会变化吗?@FrédéricHamidi——我检查了ThermalStamp属性,它在调用中得到8个值,但在调用之间不会变化……奇怪。你确定你的计时器在你认为它会滴答作响的时候会滴答作响,并且每次滴答都会调用你的代码吗?输出是开尔文的10分之一,所以你必须将其转换为Celcius@Fr是的,我已经检查/调试了好几次这个应用程序。定时器是好的,它每500毫秒滴答一次,并调用上面的代码,工作正常,但仍然没有更新…是的,你是对的。谢谢你的回复。我后来发现,使用Microsoft的WMI类无法确定CPU的温度。@jchoudhury只是想问一下,你有没有找到一些简单的方法来获得该温度?我还没有找到。如果您有比WMI更好的解决方案,请与我分享。谢谢你的关心。