[英]Working with processes, I don't get why this isn't working
foreach (Process pro in Process.GetProcesses())
{
int i = 0;
if (pro.ProcessName == "notepad")
{
i++;
textBox1.Text = Convert.ToString(i);
}
}
這段代碼應該做的是制作 textbox1.text,如果 2 記事本正在運行,則為“2”等,但它根本不做任何事情。 看這段代碼我看不出有什么問題,所以我在這里。
您的進程名稱可能是“notepad.exe”之類的......而不是做
if (pro.ProcessName == "notepad")
嘗試
if (pro.ProcessName.StartsWith("notepad", StringComparison.OrdinalIgnoreCase))
這樣您就可以隔離問題,並找出全文名稱是什么。
首先,如果沒有記事本在運行——你的代碼不會做任何事情。 可能它應該將 0 寫入文本框?
我會建議像這樣重寫代碼:
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 調用替換了您的相等檢查。
C嗯,首先,您應該將變量的聲明移到 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);
}
}
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.