public static List <ProcessInfo> GetProcessInfos() { var processes = Process.GetProcesses(); var InstanceNames = ProcessMonitor.GetProcessInstanceNameList(); List <ProcessMonitor> items = new List <ProcessMonitor>(); foreach (var process in processes) { if (process.Id == 0) { continue; } if (InstanceNames.Contains(process.ProcessName, StringComparer.OrdinalIgnoreCase)) { try { ProcessMonitor ProcessMonitor = new ProcessMonitor(process, InstanceNames); ProcessMonitor.Init(); items.Add(ProcessMonitor); } catch (System.Exception) { } } } Thread.Sleep(10); List <ProcessInfo> processInfos = new List <ProcessInfo>(); foreach (var item in items) { try { item.UpdateInfo(); ProcessInfo info = new ProcessInfo() { Id = item.Id, FileName = item.FileName, ProcessName = item.ProcessName, InstanceName = item.InstanceName, CpuUsage = item.CpuUsage, MemoryUsage = item.MemoryUsage }; processInfos.Add(info); } catch (System.Exception) { } } processInfos = processInfos.OrderByDescending(q => q.CpuUsage).ToList(); return(processInfos); }