为什么Process.WaitForExit不等待?

时间:2012-04-12 14:25:31

标签: c# process

为什么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);
            }
        }
    }

它不断循环并一次又一次地启动应用程序!

修改

它现在有用了,它没有用,因为它就像这个clsProcess.WaitForExit(1000);

5 个答案:

答案 0 :(得分:5)

此代码包含在while(true)循环中,循环体内没有breakthrowreturn语句。它确实会导致无限循环。

如果要在WaitForExit完成后退出循环,则需要引入break语句来执行此操作。

clsProcess.WaitForExit();
break;

答案 1 :(得分:0)

检查if (Process.GetProcessesByName("ServerAPPFileManager").Length > 0)是否返回false。

答案 2 :(得分:0)

嗯,这就是你编码的方式。它正在等待退出,然后在下一个if语句中再次启动它。正如杰瑞德所指出的那样,它一直无法突破。所以它启动它,等待它退出,然后再次启动

答案 3 :(得分:0)

问题可能是您没有在您创建的Process对象上调用WaitForExit,而是在Process.GetProcessesByName()返回的Process对象上调用。相反,尝试:

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

答案 4 :(得分:0)

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