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
Antwort
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");
}
Es funktioniert nicht mit StandardOutput.ReadToEnd – user3379482
@ user3379482 Jetzt und durch Ändern einiger Eigenschaften von procInfo der StandardOutput.ReadToEnd kann in Exited-Ereignishandler verwendet werden. –
- 1. Festlegen der maximalen Etikettenbreite in Xamarin.Forms
- 2. Ausführungszeit der Ablaufverfolgung
- 3. Festlegen der maximalen Anzahl von Spalten für ListView
- 4. Wie Limit der maximalen Länge auf TextBox festlegen?
- 5. Festlegen der maximalen Ergebnisse in API v4 (Python)
- 6. Berechnen der Ausführungszeit eines Verfahrens
- 7. NHibernate, Ausführungszeit der Protokollabfrage?
- 8. Wie kann man die Ausführungszeit der Laravel-Controller-Methode erhöhen?
- 9. Rudimentäre Methoden zum Messen der Ausführungszeit einer Methode
- 10. Berechnung der Ausführungszeit in C++
- 11. Finde die Ausführungszeit einer Methode
- 12. Finden der Länge der maximalen Diskontinuität
- 13. Festlegen der Array-Längeneigenschaft
- 14. Festlegen der Netzwerkschnittstellenmetrik
- 15. Zweck der maximalen vs nicht maximalen impliziten Argumente
- 16. Sinkende Ausführungszeit der parallelen Rot/Blau-Berechnung
- 17. Messung der Ausführungszeit und des verwendeten Arbeitsspeichers
- 18. Abrufen der Ausführungszeit von QueryDatabaseTable in NiFi
- 19. 8086 Assembly: Ermitteln der Ausführungszeit des Codes?
- 20. Anzeige der Ausführungszeit von MySQL in PHP
- 21. Verfolgen der Ausführungszeit des Skripts in PHP
- 22. angular.equals() nimmt 50% der Ausführungszeit in Anspruch
- 23. Ausführungszeit der erzeugten Prozesse erhöhen nach Wochen
- 24. Definiere make-Variable zur Ausführungszeit der Regel
- 25. Online Compiler zur Überprüfung der Ausführungszeit
- 26. iOS: Korrekte Methode zum Festlegen oder Vergrößern der Textfeldbreite
- 27. Wie kann ich den Rückgabewert der Methode im Abonnement festlegen?
- 28. Protokollierung: Festlegen einer maximalen Protokollstufe für einen Handler
- 29. Programmgesteuertes Festlegen der Symbolgröße
- 30. Hintergrundfarbe der Oberflächenansicht festlegen
Ihre Aussage, dass 'Process.WaitForExit' immer für die volle 3 Sekunden wartet nicht korrekt ist. – DavidG
Ich habe es eingestellt, um das Ergebnis der Ausführung von 'dir' cmd Befehl anzuzeigen, es wartet 3 Mal pro Sekunde – user3379482
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