簡介
本文將介紹一種簡單的方法來顯示CPU的狀態信息,示例演示了怎樣顯示CPU消耗的處理器時間百分比,它是通過配置一個性能計數器,並用一個標准進度條控件及標簽控件周期性輪詢處理器時間的百分比。
圖1:顯示CPU處理器時間
這個示例還能用於監控單台計算機上的多個處理器,僅僅通過在運行時取得CPU數(System.Environment.ProcessorCount可返回這個值),並動態添加Performance Monitor控件,讓其各自監控一個CPU就可以了。
還可以對文中的方法進行擴展,如下面就是一個使用了Dundas .NET Gauge Control控件,並顯示了Intel迅馳雙核處理器的程序截圖,雖然在文中沒有包含這個例子,但思路都是一樣的。
圖2:在雙核系統中監控每一個處理器
開始工程
在Visual Studio 2005中新建一個WinForm(Windows窗體應用程序)工程——這個窗體用於顯示CPU信息,且解決方案沒有引用除默認之外的其他庫。圖3為解決方案資源浏覽器中的工程:
圖3:解決方案資源浏覽器
程序的主窗體由下列標准工具箱控件組成:
◆一個組框控件
◆一個標簽控件
◆一個進度條控件
◆一個PerformanceCounter控件
◆一個定時器控件
組框控件用於包含其他的控件;進度條控件設為顯示從0至100間的數值,步長屬性設為1;標簽控件用於顯示進度條的當前數值;而進度條則代表了PerformanceCounter控件捕捉到的處理器時間百分比;進度條與標簽控件都由定時器控件的Tick事件處理程序更新;定時器設置為每10000毫秒調用Tick事件處理程序,並且在程序初始化時就開始計時了。
PerformanceCounter控件的屬性設為捕捉處理器時間百分比,可以用代碼設置,也可以在IDE中的屬性欄裡設置,在本例中,是在屬性欄裡設置,如下圖所示:
圖4:Performance Counter控件屬性
上圖中,屬性CategoryName被設為“Processor”,屬性CounterName被設為“% Processor Time”,且InstanceName設為“_Total”。如果要監控單個處理器的狀態,屬性InstanceName需設為指向某個特定的處理器(比如說0或1)。
設置完這些屬性之後,還需要編寫一些代碼,下面就是程序主窗體的代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace CpuUsageTest
{
public partial class frmCpuUsage : Form
{
public frmCpuUsage()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.Value = (int)(performanceCounter1.NextValue());
label1.Text = "Processor Time: " +
progressBar1.Value.ToString() + "%";
}
}
}
簡單吧!在此只需添加IDE默認生成之外的很少代碼,主要是Tick事件的處理程序,在這兩行代碼中,進度條被設為顯示從性能計數器得來的值,標簽控件由傳遞給進度條的值更新,而這兩個值都在每次Tick事件觸發時更新。