C# 为什么Process.WaitForExit不';我等不及了?
为什么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
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。我知道我希望它循环,但我的问题是它不会等待,即使应用程序仍在运行,它也会循环。