【发布时间】:2012-02-24 10:56:52
【问题描述】:
我想实时获取 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 度。问题出在哪里?
【问题讨论】:
-
queryObj["ThermalStamp"]的值在调用之间会发生变化吗? -
@FrédéricHamidi--我检查了 ThermalStamp 属性,它在调用中获得 8 个值,但在调用之间永远不会改变......
-
奇怪。你确定你的计时器在你认为的时候会滴答作响,并且每次滴答都会调用你的代码吗?
-
输出是开尔文的十分之一,因此您必须将其转换为摄氏度
-
@FrédéricHamidi——是的,我已经检查/调试了该应用程序多次。计时器很好,它每 500 毫秒滴答一次并调用上面的代码,运行良好,但仍然没有更新...
标签: c#