foreach (Process pro in Process.GetProcesses())
{
int i = 0;
if (pro.ProcessName == "notepad")
{
i++;
textBox1.Text = Convert.ToString(i);
}
}
这个代码应该做的是制作textbox1.text,“2”如果2个记事本正在运行等,但它根本不做任何事情。 看到这段代码我看不出任何问题,所以我在这里。
答案 0 :(得分:4)
您的进程名称可能是“notepad.exe”或其他内容......而不是
if (pro.ProcessName == "notepad")
试
if (pro.ProcessName.StartsWith("notepad", StringComparison.OrdinalIgnoreCase))
通过这种方式,您可以隔离问题,并找出全文名称。
答案 1 :(得分:4)
首先,如果没有运行记事本 - 您的代码将不会执行任何操作。可能它应该写0到textBox?
我建议重写代码:
var processes = Process.GetProcesses().Select(p => p.ProcessName).ToList();
int count = processes.Count(name => String.Compare(name, "notepad", StringComparison.OrdinalIgnoreCase) == 0);
textBox1.Text = Convert.ToString(count);
您将能够轻松调试并查看流程列表中的元素。
此外,您的过程可能是“记事本”而非“记事本”。因此,我用String.Compare调用替换了你的等式检查。
答案 2 :(得分:2)
CWell,首先,你应该将变量的声明移到foreach循环之外。
第二,你应该像alexD和agent-j那样说,改变你比较字符串的方式:
int i = 0;
foreach (Process pro in Process.GetProcesses())
{
if (pro.ProcessName.StartsWith("notepad", Stringcomparison.CurrentCultureIgnoreCase))
{
i++;
textBox1.Text = Convert.ToString(i);
}
}
希望这有帮助