我想实时获取CPU性能数据,包括温度。我用下面的代码来获得CPU温度:MSAcpi_ThermalZoneTemperature类没有显示实际温度
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度。哪里有问题?
'queryObj [“ThermalStamp”]'的值是否在调用之间改变? – 2012-02-01 18:42:36
@FrédéricHamidi - 我检查了ThermalStamp属性,它在通话中获得了8个值,但从来不会在通话间发生变化... – jchoudhury 2012-02-01 18:58:05
奇怪。你确定你的计时器会在你认为它的时候滴答滴答,并且你的代码在每个滴答时间被调用吗? – 2012-02-01 19:01:35