• C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率


    C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率:

    先看界面:

    建一个 Windows Form  桌面程序,代码如下:

    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Threading;
    
    namespace PerformanceCounterApp
    {
        public partial class MainForm : Form
        {
            private BackgroundWorker backgroundWorker;
            private bool isWorking = false;
    
            public MainForm()
            {
                InitializeComponent();
            }
    
            private void Form_Load(object sender, EventArgs e)
            {
                cpuLabel.Text = string.Empty;
                diskLabel.Text = string.Empty;
                backgroundWorker = new BackgroundWorker();
                backgroundWorker.WorkerReportsProgress = true;
                backgroundWorker.WorkerSupportsCancellation = true;
                backgroundWorker.DoWork += BackgroundWorker_DoWork;
                backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;
                backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
            }
    
            private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
            {
                //PerformanceCounter diskp = new PerformanceCounter("PhysicalDisk", "% Disk Time", "_Total");
                isWorking = true;
                backgroundWorker.ReportProgress(0, "Loading.../");
                PerformanceCounter cpup = new PerformanceCounter("Processor", "% Processor Time", "_Total");
                PerformanceCounter diskp = new PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "_Total");
                try
                {
                    do
                    {
                        Thread.Sleep(150);
                        var cpuv1 = (int)cpup.NextValue();
                        var diskv1 = (int)diskp.NextValue();
                        Thread.Sleep(150);
                        var cpuv2 = (int)cpup.NextValue();
                        var diskv2 = (int)diskp.NextValue();
                        Thread.Sleep(150);
                        var cpuv3 = (int)cpup.NextValue();
                        var diskv3 = (int)diskp.NextValue();
                        Thread.Sleep(150);
                        var cpuv4 = (int)cpup.NextValue();
                        var diskv4 = (int)diskp.NextValue();
                        var cpuv = (cpuv1 + cpuv2 + cpuv3 + cpuv4) / 4;
                        var diskv = (diskv1 + diskv2+ diskv3 + diskv4) / 4;
                        string data = $"{cpuv}%/{diskv}";
                        backgroundWorker.ReportProgress(0,data);
                    } while (!backgroundWorker.CancellationPending);
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    cpup.Dispose();
                    diskp.Dispose();
                    isWorking = false;
                }
            }
            private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                string[] data = e.UserState.ToString().Split('/');
                cpuLabel.Text = $"CPU: {data[0]}";
                diskLabel.Text = $"Disk: {data[1]} Bytes/sec";
            }
            private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                var result = e.Result;
                var cc = e.Cancelled;
            }
    
    
            private void startButton_Click(object sender, EventArgs e)
            {
                if (backgroundWorker.CancellationPending) return;
                if (isWorking)
                {
                    startButton.Text = "Start";
                    backgroundWorker.CancelAsync();
                }
                else
                {
                    startButton.Text = "Stop";
                    backgroundWorker.RunWorkerAsync();
                } 
            }
    
            private void Form_Closed(object sender, FormClosedEventArgs e)
            {
                if (isWorking)
                {
                    startButton.Enabled = false;
                    backgroundWorker.CancelAsync();
                }
            }
        }
    }
  • 相关阅读:
    Ubuntu16.04更新记
    「BZOJ2153」设计铁路
    [UVA-11995]I Can Guess the Data Structure!
    [UVA-11100] The Trip
    [UVA-11039]Children's Game
    [BZOJ1008][HNOI2008]越狱
    NOIP2018退役祭
    修马路
    [NOIP2005]过河
    [POJ1958][Strange Tower of Hanoi]
  • 原文地址:https://www.cnblogs.com/anjou/p/9593537.html
Copyright © 2020-2023  润新知