在c#中获得任务管理器的具体过程
本文关键字:过程 任务管理器 | 更新日期: 2023-09-27 18:14:02
我有2个列表框,另一个是获得特定的进程(我列出它像chrome,油漆,记事本等)当这些程序运行时,我的标签颜色会变成绿色,当这些程序之一关闭时,标签会变成红色,后面跟着关闭的程序名称。我的问题是我不能指定关闭的程序,当我关闭任何程序时,我的标签总是变成红色。
下面是我的代码:
private void running_process()
{
Process[] processes = Process.GetProcesses("PCNAME");
foreach (Process p in processes)
{
foreach (string item in listBox2.Items)
{
if (item == p.ProcessName)
{
listBox1.Items.Add(p.ProcessName);
}
if (listBox1.Items.Contains(item))
label4.BackColor = Color.Green;
else
label4.BackColor = Color.Red;
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
listBox1.Items.Clear();
running_process();
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}
代码的问题在于您为每次迭代设置了label4.BackColor
,因此它将只保留最后一次迭代的值。因此,如果listBox2中的最后一个进程在listBox1中,那么标签应该是绿色的,如果不是,则是红色的。
我不确定我是否正确地得到了你的要求(在listBox1方面),但如果你想让它保持在listBox2中运行和列出的进程(就像它在你的代码中一样),那么这应该工作:
label4.BackColor = Color.Green; //by default the label color is Green
foreach (string item in listBox2.Items)
{
var processDeleted = true; //and by default we suppose that every process was deleted
foreach (var process in processes)
{
if (process.ProcessName == item)
{
listBox1.Items.Add(process.ProcessName);
processDeleted = false;
}
}
if (processDeleted) label4.BackColor = Color.Red;
}
但是这样你就可以在listBox1中得到一个类似条目的大列表,所以我将这样写:
label4.BackColor = Color.Green;
foreach (string item in listBox2.Items)
{
if (processes.Any(x => x.ProcessName == item))
listBox1.Items.Add(item);
else
label4.BackColor = Color.Red;
}