如何将每个进程的cpu使用情况转换为PopulateApplications()
?
getCPUUsage()
为每个进程提供了相同的值。它只是为一个进程获取cpu使用情况。
其余代码似乎工作正常。
来自getCPUUsage()
的class Core
:public static double getCPUUsage()
{
ManagementObject processor = new ManagementObject("Win32_PerfFormattedData_PerfOS_Processor.Name='_Total'");
processor.Get();
return double.Parse(processor.Properties["PercentProcessorTime"].Value.ToString());
}
在form1中,我有一种方法可以显示有关图标,名称和状态(即运行/未运行)等过程的信息。
void PopulateApplications()
{
DoubleBufferedd(dataGridView1, true);
int rcount = dataGridView1.Rows.Count;
int rcurIndex = 0;
foreach (Process p in Process.GetProcesses())
{
try
{
if (File.Exists(p.MainModule.FileName))
{
var icon = Icon.ExtractAssociatedIcon(p.MainModule.FileName);
Image ima = icon.ToBitmap();
ima = resizeImage(ima, new Size(25, 25));
ima = (Image)(new Bitmap(ima, new Size(25, 25)));
String status = p.Responding ? "Running" : "Not Responding";
if (rcurIndex < rcount - 1)
{
var currentRow = dataGridView1.Rows[rcurIndex];
currentRow.Cells[0].Value = ima;
currentRow.Cells[1].Value = p.ProcessName;
currentRow.Cells[2].Value = cpuusage;
currentRow.Cells[3].Value = status;
}
else
{
dataGridView1.Rows.Add(
ima, p.ProcessName,cpuusage, status);//false, ima, p.ProcessName, status);
}
rcurIndex++;
}
}
catch ( Exception e)
{
string t = "error";
}
}
if (rcurIndex < rcount - 1)
{
for (int i = rcurIndex; i < rcount - 1; i++)
{
dataGridView1.Rows.RemoveAt(rcurIndex);
}
}
}
我添加了这一行:
currentRow.Cells[2].Value = cpuusage;
cpuusage
是双类型变量。
我也更改了此行,以添加cpuusage
:
dataGridView1.Rows.Add(
ima, p.ProcessName,cpuusage, status);
现在我有一个后台工作程序事件dowork
,我使用cpuusage
来获取cpu使用值:
this.Invoke(new Action(() => cpuusage = Core.getCPUUsage()));
也许我不需要通过getCPUUsage()
调用方法backgroundworker
。
这是我在运行程序时看到的:
所有进程都有相同的CPU使用率?不是逻辑。 然后当有更新时,我看到:
同样,所有单元格都具有相同的cpu使用值。但是在左边有许多进程,每个进程都应该拥有它自己的cpu使用。