为何LibreHardwareMonitor中Hardware.Sensors无法工作?C#问题
问题修复方案
错误原因
Hardware.Sensors是实例属性,必须通过Hardware类的具体实例访问,不能直接用类名调用,这就是报错的核心原因。
修正后的代码
private void tabTemps_Enter(object sender, EventArgs e) { Computer c = new Computer { IsCpuEnabled = true, IsGpuEnabled = true, IsMemoryEnabled = true, IsMotherboardEnabled = true, IsControllerEnabled = true, IsNetworkEnabled = true, IsStorageEnabled = true }; c.Open(); // 遍历Computer对象中的所有硬件设备 foreach (var hardware in c.Hardware) { // 遍历当前硬件下的所有传感器 foreach (ISensor sensor in hardware.Sensors) { // 仅筛选温度传感器,过滤无关数据 if (sensor.SensorType == SensorType.Temperature) { // 处理空值并格式化温度显示 string tempValue = sensor.Value.HasValue ? $"{sensor.Value.Value.ToString("F1")}°C" : "无数据"; rtbTemps.AppendText($"传感器: {sensor.Name}, 温度: {tempValue}\n"); } } } // 释放资源 c.Close(); }
关键说明
- 必须通过
Computer对象的Hardware集合获取具体硬件实例,再访问该实例的Sensors属性。 - 添加
SensorType.Temperature筛选,只输出温度数据,避免显示电压、风扇转速等非目标信息。 - 对
sensor.Value做空值处理,防止空引用异常;格式化温度保留1位小数,提升可读性。 - 操作完成后调用
c.Close(),确保释放硬件监控相关资源。
内容的提问来源于stack exchange,提问作者nozzy
相关产品推荐
相关产品推荐

