Mam aplikację, która ma
Process.Start()
aby uruchomić kolejną aplikację „ABC”. Chcę poczekać, aż aplikacja się zakończy (proces umiera) i kontynuować wykonywanie. Jak mogę to zrobić?
Jednocześnie może być uruchomionych wiele wystąpień aplikacji „ABC”.
Odpowiedzi:
Myślę, że po prostu chcesz tego:
Metodę można znaleźć na stronie MSDN . Ma również przeciążenie, w którym możesz określić limit czasu, więc potencjalnie nie czekasz wiecznie.
źródło
Użyć
Process.WaitForExit
? Lub zasubskrybujProcess.Exited
wydarzenie, jeśli nie chcesz blokować? Jeśli to nie pomoże, podaj nam więcej informacji o swoich wymaganiach.źródło
WaitForExit
pierwszy ... w niektórych przypadkach możesz chcieć wykonać więcej kodu, gdy coś się skończy, ale to nie znaczy, że musisz zablokować bieżący wątek.Process.Exited
zdarzenia, uważam, że musisz wcześniej skonfigurować proces, ustawiając wartośćProcess.EnableRaisingEvents
true. Chociaż biorąc pod uwagę, że to pytanie ma ponad trzy lata, być możeProcess.EnableRaisingEvents
nie było to w chwili zadawania pytania .Process.Exited
wydarzenia. Dzięki! +1 za kompletnośćW mojej aplikacji wykonuję następujące czynności:
Jest tam kilka dodatkowych funkcji, które mogą być przydatne ...
źródło
Możesz użyć opcji oczekiwania na wyjście lub złapać właściwość HasExited i zaktualizować interfejs użytkownika, aby użytkownik był „poinformowany” (zarządzanie oczekiwaniami):
źródło
Miałem przypadek, w którym
Process.HasExited
nie zmieniłem się po zamknięciu okna należącego do procesu. WięcProcess.WaitForExit()
też nie działało.Process.Responding
Po zamknięciu okna musiałem monitorować, czy nie jest to fałsz:Być może to pomaga komuś.
źródło
Myślę, że Process.WaitForExit powinien być tym, czego szukasz.
źródło
Nawiązując do przykładu Microsoft: [ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.enableraisingevents?view=netframework-4.8]
Najlepiej byłoby ustawić:
w przeciwnym razie kod zostanie zablokowany. Również żadne dodatkowe właściwości nie są potrzebne.
źródło
Jak mówi Jon Skeet, użyj
Process.Exited
:źródło
Spróbuj tego:
źródło