C# 为什么Process.WaitForExit不';我等不及了?

C# 为什么Process.WaitForExit不';我等不及了?,c#,process,C#,Process,为什么Process.WaitForExit不等待 static void Main(string[] args) { while (true) { try { if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0) { P

为什么Process.WaitForExit不等待

static void Main(string[] args)
    {
        while (true)
        {
            try
            {
                if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0)
                {
                    Process clsProcess = Process.GetProcessesByName("ServerAPPFileManager")[0];
                    Console.WriteLine(clsProcess.ProcessName);
                    clsProcess.WaitForExit();
                }
                if (System.IO.File.Exists(System.IO.Path.Combine(Environment.CurrentDirectory, "ServerAPPFileManager.exe")))
                {
                    Console.WriteLine("File Found");
                    Process p = new Process();
                    p.StartInfo.Verb = "runas";
                    p.StartInfo.FileName = System.IO.Path.Combine(Environment.CurrentDirectory, "ServerAPPFileManager.exe");
                    p.Start();
                }
            }
            catch(Exception e)
            {
                Console.Write(e.Message);
                System.Threading.Thread.Sleep(1000);
            }
        }
    }
它不断循环并一次又一次地启动应用程序

编辑:


它现在起作用了,但没有起作用,因为它是这样的
clsproccess.WaitForExit(1000)

此代码被包装在
while(true)
循环中,循环体中没有
break
throw
return
语句。它确实会导致一个无限循环

如果希望在
WaitForExit
完成后退出循环,则需要引入
break
语句

clsProcess.WaitForExit();
break;

检查
如果(Process.getProcessByName(“ServerAPPFileManager”).Length>0)
没有返回false。

好的,这就是您编码它的方式。它正在等待退出,然后在下一个if语句中再次启动它。正如Jared指出的,它一直在循环,没有办法爆发。因此,它启动它,等待它退出,然后再次启动它

问题可能是您没有对已创建的流程对象调用WaitForExit,而是对从Process.getProcessByName()返回的流程对象调用WaitForExit。相反,请尝试:

Process p = new Process(); 
// etc
p.Start();
p.WaitForExit();

在while语句中删除它并将其添加到计时器中。。验证if process.hasexited=true,然后再次调用您的进程,否则,验证if process.responding=true,然后等待else强制进程终止

@MurHafSoz it wall阻塞代码,直到应用程序退出。一旦退出,代码将重新开始运行,因此我将
保留为(true)
,只需添加一个
中断?@MurHafSoz这取决于你的意图。有点不清楚这个程序到底想实现什么。应用程序应该检查“服务器应用程序”是否正在运行,如果没有。。然后这个应用程序应该启动服务器应用程序,然后再次循环检查它是否正在运行如果它是真的,它会等待应用程序退出以再次启动它,但问题是当“服务器应用程序”仍在运行时,它会继续循环。@MurHafSoz在这种情况下,我会稍微更改代码,而不使用循环。我将基本上改变
if
语句的顺序,并删除循环。这就完成了你在这里的尝试,它不会返回false。。如果它这样做了,它会启动应用程序,当循环再次启动时,它会返回true。我知道我希望它循环,但我的问题是它不会等待,即使应用程序仍在运行,它也会循环。