Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查进程是否每分钟运行一次_C# - Fatal编程技术网

C# 检查进程是否每分钟运行一次

C# 检查进程是否每分钟运行一次,c#,C#,我有这个基本的代码,可以检查记事本是否每分钟都在运行 namespace Watcher { class Program { static void Main(string[] args) { for (int i = 0; ; i--) { foreach (Process clsProcess in Process.GetProcesses())

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

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);
            }
        }
    }
}

问题是,它为每个正在运行的进程返回“NFalse”(例如,它将打印100个进程)。如何只打印一次以显示进程未运行?

重构代码。

你用一种方法做的太多了。将检查记事本是否正在运行的代码放入单独的方法中:

static bool CheckIfProcessIsRunning(string nameSubstring)
{
    foreach (Process clsProcess in Process.GetProcesses())
    {
        if (clsProcess.ProcessName.Contains(nameSubstring))
        {
            return true;
        }
    }
    return false;
}
您可以使用LINQ进一步简化此过程:

static bool CheckIfProcessIsRunning(string nameSubstring)
{
    return Process.GetProcesses().Any(p => p.ProcessName.Contains(nameSubstring));
}
一旦编写了这个方法,剩下的就是调用它并根据它返回的是真还是假打印正确的消息

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

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

您只需要检查您感兴趣的过程。不要费心循环所有正在运行的进程。使用


换成这个,你只需要打印一次

var b = false;
foreach (Process clsProcess in Process.GetProcesses())
            {
                if (clsProcess.ProcessName.Contains("notepad"))
                {
                    if (!b) b = true;
                }
            }
                Console.WriteLine(b);

这似乎很有效

Dim x = Process.GetProcesses().ToList().FirstOrDefault(Function(p) p.ProcessName.Contains("Notepad"))
if x Is Nothing then
    Console.WriteLine("false")
end if

非静态字段、方法或属性“Watcher.Program.CheckIfProcessIsRunning(string)”需要对象引用。使用CheckIfProcessIsRunning(“记事本”)时,我会得到这个值
Dim x = Process.GetProcesses().ToList().FirstOrDefault(Function(p) p.ProcessName.Contains("Notepad"))
if x Is Nothing then
    Console.WriteLine("false")
end if