2010-05-06 12 views
5

sonlandırıldı olsa bile false döndürür:C#: Process.HasExited süreç Muhtemelen bu soruya tersini

Process.HasExited returns true even though process is running? Bir süreç() Öldür denir ve çıkıldı gibi görünüyor. Ancak HasExited'i test ettiğimde, yanlış anlıyorum:

Ve bu süresiz olarak devam eder. Verilmiş, bu kodu en sonunda beklemeyi durdurmak için değiştirmem gerekiyor, ama işten çıkarıldığına göre haritadan çıkıldığında HasExited'in neden hala yanlış olduğunu merak ediyorum.

cevap

7

Standart çıktıyı yönlendiriyor musunuz? Aşağıdaki MSDN devletler:

standart çıktı uyumsuz olay işleyicileri yeniden yönlendirildi

, bu özellik true döndüğünde çıkış işleme tamamlanmamış olması mümkündür. Eşzamansız olay işlemenin tamamlandığından emin olmak için HasExited'i denetlemeden önce hiçbir parametre almayan WaitForExit() yüklemesini çağırın.

Neyse, önerilen geçici çözüm muhtemelen hile yapmak gerekir:

doğru
myProcess.Kill(); 
myProcess.WaitForExit(); 
+0

, ben standart çıktıya yönlendirmek etmedi. Kill ve WaitForExit (1000) 'i yeniden deneme üçlüsüne yerleştirmeyi tercih ettim. MSDN makalesinin önerdiği gibi sonsuza dek beklemem. – Jeremy

+0

Ayrıca, bunun bir sürecin sonlandırılmasına ve standart çıkış akışlarının açık olmasına olanak tanıdığı anlamına da geliyor. Ya da makalede, yerel yayinlayicimin, kaynak isleminin sonlanmasina ragmen iletilecek iletiyi almadii anlamina geliyor. – Jeremy