2023-10-22-Csharp实现读取硬件温度
- TOC
C#实现读取硬件温度
利用了LibreHardwareMonitor的dll库文件,将该文件引用到工程
using LibreHardwareMonitor.Hardware;
using OpenHardwareMonitorApi;
namespace TemperatureTest_WPF
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public class UpdateVisitor : IVisitor
{
public void VisitComputer(IComputer computer)
{
computer.Traverse(this);
}
public void VisitHardware(IHardware hardware)
{
hardware.Update();
foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this);
}
public void VisitSensor(ISensor sensor) { }
public void VisitParameter(IParameter parameter) { }
}
static int getTemperature()//获取GPU温度
{
int ret = 0;
Computer myComputer = new Computer()
{
IsCpuEnabled = true,
IsGpuEnabled = true,
/*IsMemoryEnabled = true,
IsMotherboardEnabled = true,
IsControllerEnabled = true,
IsNetworkEnabled = true,
IsStorageEnabled = true*/
};
UpdateVisitor updateVisitor = new UpdateVisitor();
myComputer.Open();
myComputer.Accept(updateVisitor);
//使用LINQ查询来替代foreach循环,简化代码并提高可读性。
var gpuTemperature = myComputer.Hardware
.FirstOrDefault(h => h.HardwareType == HardwareType.GpuNvidia)?//此处调整硬件类型
.Sensors.FirstOrDefault(s => s.SensorType == SensorType.Temperature);
if (gpuTemperature != null)
{
ret = Convert.ToInt32(gpuTemperature.Value);
}
return ret;
}
private async void TempertureCheck_Click(object sender, RoutedEventArgs e)//采用异步处理
{
int t = await GetTemperatureAsync();
TempertureDisplay.Text = t.ToString() + "度";
}
private Task<int> GetTemperatureAsync()
{
return Task.Run(() =>
{
// 异步操作的代码
int temperature = getTemperature();
return temperature;
});
}
}
}

浙公网安备 33010602011771号