检查进程是否每分钟都在运行

use*_*896 5 c#

我有这个基本代码,可以检查每分钟运行的记事本.

namespace Watcher
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; ; i--)
            {
                foreach (Process clsProcess in Process.GetProcesses())
                {
                    if (clsProcess.ProcessName.Contains("notepad"))
                    {
                        Console.WriteLine("True");
                    }
                    Console.WriteLine("NFalse");
                }
                Thread.Sleep(10000);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是它为每个正在运行的进程返回"NFalse"(例如,它将打印100个).如何才能使此打印一次显示该进程未运行?

Mar*_*ers 7

重构你的代码.

你在一种方法中做得太多了.将您的代码检查以查看记事本是否正在运行到单独的方法中:

static bool CheckIfProcessIsRunning(string nameSubstring)
{
    foreach (Process clsProcess in Process.GetProcesses())
    {
        if (clsProcess.ProcessName.Contains(nameSubstring))
        {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用LINQ进一步简化此操作:

static bool CheckIfProcessIsRunning(string nameSubstring)
{
    return Process.GetProcesses().Any(p => p.ProcessName.Contains(nameSubstring));
}
Run Code Online (Sandbox Code Playgroud)

一旦你编写了这个方法,剩下的就是调用它并打印正确的消息,具体取决于它是返回true还是false.

while (true)
{
    string message = CheckIfProcessIsRunning("notepad") ? "True" : "NFalse";
    Console.WriteLine(message);
    Thread.Sleep(10000);
}
Run Code Online (Sandbox Code Playgroud)

现在不是一个具有复杂逻辑的长方法,而是有两个非常简单的方法.