using System; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Windows.Forms.DataVisualization.Charting; using System.Threading; namespace CPUUsage { public partial class Form1 : Form { private Thread addDataRunner; public delegate void AddDataDelegate(); public AddDataDelegate addDataDel; public double state; PerformanceCounter p; public Form1() { InitializeComponent(); } private void btnShow_Click(object sender, EventArgs e) { p = new PerformanceCounter(); p.CategoryName = "Processor"; p.CounterName = "% Processor Time"; p.InstanceName = "_Total"; addDataRunner.Start(); } private void Form1_Load(object sender, EventArgs e) { //Thread ThreadStart addDataThreadStart = new ThreadStart(AddDataThreadLoop); addDataRunner = new Thread(addDataThreadStart); addDataDel += new AddDataDelegate(AddData); chart1.ChartAreas[0].AxisX.Minimum = 0; chart1.ChartAreas[0].AxisX.Maximum = 60; chart1.ChartAreas[0].AxisY.Minimum = 0; chart1.ChartAreas[0].AxisY.Maximum = 100; chart1.Series.Clear(); Series newSeries = new Series("CPU Usage"); newSeries.ChartType = SeriesChartType.Spline; newSeries.BorderWidth = 2; newSeries.Color = Color.Orange; newSeries.XValueType = ChartValueType.Double; chart1.Series.Add(newSeries); } private void AddDataThreadLoop() { while (true) { chart1.Invoke(addDataDel); Thread.Sleep(1000); } } public void AddData() { foreach (Series ptSeries in chart1.Series) { AddNewPoint(ptSeries); } } public void AddNewPoint(Series ptSeries) { float usage = p.NextValue(); ptSeries.Points.AddXY(state, usage); lbUsage.Text = ((int)usage).ToString()+"%"; lbPoint.Text = string.Format("{0}{1}", state.ToString()," sec"); if (state % 60 == 0) { chart1.ChartAreas[0].AxisX.Minimum = state; chart1.ChartAreas[0].AxisX.Maximum = state+60; } state++; chart1.Invalidate(); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { addDataRunner.Abort(); } } }
C#으로 CPU사용량 측정 프로그램 소스 코드입니다.
chart는 MS chart를 이용하였습니다.(MS chart를 이용하시려면 .net Framework 3.5 sp1, mschart관련 컴포넌트가 필요합니다..)