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

问题描述

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

    }
}
代码应该执行的操作是使textBox1.text,\“ 2 \”(如果2个记事本正在运行等),但是它根本不执行任何操作。 查看此代码我看不到任何问题,所以我在这里。     

解决方法

        首先,如果没有记事本正在运行-您的代码将不会执行任何操作。可能应该将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);
您将能够轻松调试并查看哪些元素在您的进程列表中。 此外,您的过程可能是\“ Notepad \”而不是\“ notepad \”。因此,我用String.Compare调用替换了您的相等性检查。     ,        您的进程名称可能是\“ notepad.exe \”或其他内容...
if (pro.ProcessName == \"notepad\")
尝试
if (pro.ProcessName.StartsWith(\"notepad\",StringComparison.OrdinalIgnoreCase)) 
这样,您可以隔离问题,并找出完整的文本名称。     ,        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);
    }
}
希望这可以帮助