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;
            });
        }

    }
}

posted @ 2024-04-19 16:56  AuggieChen  阅读(26)  评论(0)    收藏  举报