我正在制作一个测试 WinForm 应用程序,以尝试和监视具有相同名称的进程。但由于某种原因它不起作用。
但是我表格上的标签保持为零。
表单的全局变量:
Thread checkProcess;
List<PerformanceCounter> pcs;
单击按钮开始监控过程
private void btnMonitor_Click(object sender, EventArgs e)
{
List<Process> proc = new List<Process>();
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName.IndexOf(txtProcessName.Text) > -1)
{
proc.Add(p);
}
}
pcs = new List<PerformanceCounter>();
int k = 0;
foreach (Process p in proc)
{
pcs.Add(new PerformanceCounter("Process", "% Processor Time", k > 0 ?
string.Format("{0}#{1}", p.ProcessName, k) : p.ProcessName, true));
lstbxPC.Items.Add(k > 0 ?
string.Format("{0}#{1}", p.ProcessName, k) : p.ProcessName);
k++;
}
checkProcess = new Thread(CheckProcess);
checkProcess.Start();
}
监视和更新标签的方法(在它自己的线程中开始):
private void CheckProcess()
{
int temp = 0;
while (true)
{
temp = 0;
foreach (PerformanceCounter pc in pcs)
{
if (temp < pc.NextValue())
{
temp = (int)pc.NextValue();
}
}
// Set the label in a ThreadSafe way. This does work
SetControlPropertyThreadSafe(lblCPU, "Text", Convert.ToString(temp) + "%");
Thread.Sleep(1000);
}
}