簡體   English   中英

使用流程,我不明白為什么這不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM