Ich habe eine Anwendung, die tut
Process.Start()
um eine andere Anwendung 'ABC' zu starten. Ich möchte warten, bis diese Anwendung endet (Prozess stirbt) und meine Ausführung fortsetzen. Wie kann ich es tun?
Möglicherweise werden mehrere Instanzen der Anwendung 'ABC' gleichzeitig ausgeführt.
Antworten:
Ich denke du willst nur das:
Informationen zur Methode finden Sie auf der MSDN-Seite . Es hat auch eine Überlastung, in der Sie das Zeitlimit angeben können, sodass Sie möglicherweise nicht ewig warten müssen.
quelle
Verwenden
Process.WaitForExit
? Oder abonnieren Sie dieProcess.Exited
Veranstaltung, wenn Sie nicht blockieren möchten? Wenn das nicht Ihren Wünschen entspricht, geben Sie uns bitte weitere Informationen zu Ihren Anforderungen.quelle
WaitForExit
... in einigen Fällen möchten Sie möglicherweise mehr Code ausführen, wenn etwas fertig ist, aber das bedeutet nicht, dass Sie den aktuellen Thread blockieren müssen.Process.Exited
Ereignis verwenden möchten, müssen Sie den Prozess meines Erachtens im Voraus konfigurieren, indem Sie ihnProcess.EnableRaisingEvents
auf true setzen. Wenn man bedenkt, dass diese Frage älter als drei Jahre ist, kann es sein, dass diesProcess.EnableRaisingEvents
zum Zeitpunkt der Beantwortung noch nicht der Fall war.Process.Exited
Veranstaltung gesucht . Vielen Dank! +1 der VollständigkeitIn meiner Bewerbung mache ich Folgendes:
Es gibt ein paar zusätzliche Funktionen, die Sie vielleicht nützlich finden ...
quelle
Sie können das Warten auf das Beenden verwenden oder die HasExited-Eigenschaft abfangen und Ihre Benutzeroberfläche aktualisieren, um den Benutzer "informiert" zu halten (Erwartungsverwaltung):
quelle
Ich hatte einen Fall, in dem
Process.HasExited
sich nach dem Schließen des zum Prozess gehörenden Fensters nichts geändert hat. AlsoProcess.WaitForExit()
auch nicht funktioniert. Ich musste überwachen,Process.Responding
dass es nach dem Schließen des Fensters falsch lief:Vielleicht hilft das jemandem.
quelle
Process.WaitForExit sollte genau das sein, wonach Sie suchen, denke ich.
quelle
Bezugnehmend auf das Microsoft-Beispiel: [ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.enableraisingevents?view=netframework-4.8]
Am besten setzen Sie:
Andernfalls wird der Code blockiert. Auch keine zusätzlichen Eigenschaften erforderlich.
quelle
Verwenden Sie, wie Jon Skeet sagt, Folgendes
Process.Exited
:quelle
Versuche dies:
quelle