2012-04-12 332 views
2

为什么Process.WaitForExit不会等待?为什么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

该代码被包装在一个while(true)循环,有内无breakthrowreturn声明循环体。它确实会导致无限循环。

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

clsProcess.WaitForExit(); 
break; 
+0

但是WaitForExist怎么样?是不是会阻塞代码? – 2012-04-12 14:29:28

+0

@MurHafSoz它墙上的代码,直到应用程序退出。一旦它退出代码将再次开始运行 – JaredPar 2012-04-12 14:30:35

+0

所以我保留'while(true)'并且只是添加一个'break;'? – 2012-04-12 14:32:42

0

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

+0

它不会返回false。如果是,它会启动应用程序,当循环再次启动时它将返回true。 – 2012-04-12 14:32:00

0

那么,这是你编码它的方式。它正在等待退出,然后在接下来的if语句中再次启动它。正如Jared指出的那样,它始终无法爆发。所以它启动它,等待它退出,然后再次启动

+0

我知道我想让它循环,但是我的问题是它不会等待,即使应用程序仍在运行,它也会循环。 – 2012-04-12 14:36:12

0

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

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

删除它在while语句和一个计时器添加它..如果验证= process.hasexited true,那么再次拨打您的过程,否则,如果验证= process.responding真正然后等待其他强制进程kill

相关问题