2016-08-22 4 views
-1

Ich habe eine Methode, die einen Prozess enthält, der innerhalb einer Frist (z. B. 3 Sekunden) gestoppt werden muss, ob er beendet wurde oder nicht, und ich möchte nicht warten, wenn dies der Fall ist die Ausführung beendet, bevor diese tote Linie erreicht wurde.
mit Process.WaitForExit (3000) lässt das Programm 3s warten, auch wenn der Prozess gestoppt wurde, bevor das Limit erreicht.
Noch eine Sache, ich benutze process.StandardOutput.ReadToEnd(); Um das Ausführungsergebnis zu lesen, ist es mir egal, ob es null oder eine leere Zeichenfolge oder was auch immer zurückgibt, wenn es nicht fertig ist. Und ich denke, dass Timer das gleiche Problem verursachen werden.
Irgendwelche Ideen?Festlegen der maximalen Ausführungszeit der Methode

+0

Ihre Aussage, dass 'Process.WaitForExit' immer für die volle 3 Sekunden wartet nicht korrekt ist. – DavidG

+0

Ich habe es eingestellt, um das Ergebnis der Ausführung von 'dir' cmd Befehl anzuzeigen, es wartet 3 Mal pro Sekunde – user3379482

+0

Welchen Befehl übergeben Sie es? Was auch immer du machst, kommt nicht richtig raus. Um zum Beispiel "dir" zu machen, müssen Sie 'cmd' mit Parametern von'/C dir 'ausführen. – DavidG

Antwort

0

Exited Ereignis Ihres Prozesses kann behandelt werden, um die Austrittszeit zu ermitteln.
WaitForExit gibt einen booleschen Wert zurück, der angibt, dass Ihr Prozess das Zeitlimit vor dem Beenden erreicht hat oder nicht.

Testen Sie diesen Code:

Process proc = new Process(); 
ProcessStartInfo procInfo = new ProcessStartInfo() 
{ 
    FileName = "d:/test.exe", 
    UseShellExecute = false, 
    RedirectStandardOutput = true 
}; 

proc.StartInfo = procInfo; 
proc.EnableRaisingEvents = true; 
proc.Exited += (o, args) => 
{ 
    MessageBox.Show(proc.StandardOutput.ReadToEnd()); 
}; 
proc.Start(); 

if (proc.WaitForExit(3000)) 
{ 
    MessageBox.Show("YES"); 
} 
else 
{ 
    MessageBox.Show("NO"); 
} 
+0

Es funktioniert nicht mit StandardOutput.ReadToEnd – user3379482

+0

@ user3379482 Jetzt und durch Ändern einiger Eigenschaften von procInfo der StandardOutput.ReadToEnd kann in Exited-Ereignishandler verwendet werden. –

Verwandte Themen