2012-04-12 368 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

相關問題