使用流程,我不明白为什么这不起作用

时间:2011-06-13 22:18:28

标签: c# .net process

foreach (Process pro in Process.GetProcesses())
{
    int i = 0;
    if (pro.ProcessName == "notepad")
    {
        i++;
        textBox1.Text = Convert.ToString(i);

    }
}

这个代码应该做的是制作textbox1.text,“2”如果2个记事本正在运行等,但它根本不做任何事情。 看到这段代码我看不出任何问题,所以我在这里。

3 个答案:

答案 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);
    }
}

希望这有帮助