如何解决使用流程,我不明白为什么它不起作用
||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);
}
}
希望这可以帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。