以编程方式显示所有正在运行的进程的CPU使用率?

时间:2014-06-07 23:44:27

标签: c# .net winforms

问题

如何将每个进程的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

这是我在运行程序时看到的:

enter image description here

所有进程都有相同的CPU使用率?不是逻辑。 然后当有更新时,我看到:

enter image description here

同样,所有单元格都具有相同的cpu使用值。但是在左边有许多进程,每个进程都应该拥有它自己的cpu使用。

0 个答案:

没有答案