同じ名前のプロセスを試して監視するために、テスト用の 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);
}
}