Udostępnij za pośrednictwem


Process.WaitForExit Metoda

Definicja

Ustawia okres oczekiwania na zakończenie skojarzonego procesu i blokuje bieżący wątek wykonywania do czasu upływu czasu lub zakończenia procesu. Aby uniknąć blokowania bieżącego wątku Exited , użyj zdarzenia .

Przykłady kodu można znaleźć na StandardError stronach referencyjnych ExitCode właściwości i .

Przeciążenia

WaitForExit()

Nakazuje Process składnikowi oczekiwanie na zakończenie skojarzonego procesu przez czas nieokreślony.

WaitForExit(Int32)

Nakazuje Process składnikowi oczekiwanie określonej liczby milisekund na zakończenie skojarzonego procesu.

WaitForExit(TimeSpan)

Instruuje składnik Procesu, aby poczekał określony czas na zakończenie skojarzonego procesu.

WaitForExit()

Źródło:
Process.cs
Źródło:
Process.cs
Źródło:
Process.cs

Nakazuje Process składnikowi oczekiwanie na zakończenie skojarzonego procesu przez czas nieokreślony.

public:
 void WaitForExit();
public void WaitForExit ();
member this.WaitForExit : unit -> unit
Public Sub WaitForExit ()

Wyjątki

Nie można uzyskać dostępu do ustawienia oczekiwania.

Nie ustawiono żadnego procesu Id , Handle a właściwość, z której Id można określić, nie istnieje.

-lub-

Brak procesu skojarzonego z tym Process obiektem.

-lub-

Próbujesz wywołać WaitForExit() proces uruchomiony na komputerze zdalnym. Ta metoda jest dostępna tylko w przypadku procesów uruchomionych na komputerze lokalnym.

Przykłady

Zobacz sekcję Uwagi na StandardError stronie odwołania do właściwości.

Uwagi

WaitForExit() Sprawia, że bieżący wątek czeka na zakończenie skojarzonego procesu. Powinna być wywoływana po wywołaniu wszystkich innych metod w procesie. Aby uniknąć blokowania bieżącego wątku Exited , użyj zdarzenia .

Ta metoda nakazuje składnikowi oczekiwanie Process nieskończonej ilości czasu na zakończenie procesu i procedur obsługi zdarzeń. Może to spowodować, że aplikacja przestanie odpowiadać. Jeśli na przykład wywołasz CloseMainWindow proces, który ma interfejs użytkownika, żądanie do systemu operacyjnego w celu zakończenia skojarzonego procesu może nie być obsługiwane, jeśli proces jest zapisywany, aby nigdy nie wprowadzać pętli komunikatów.

Uwaga

W .NET Framework 3.5 i starszych wersjach WaitForExit() przeciążenie czekało na MaxValue milisekundy (około 24 dni), a nie na czas nieokreślony. Ponadto poprzednie wersje nie czekały na zakończenie obsługi zdarzeń, jeśli osiągnięto pełny MaxValue czas.

To przeciążenie zapewnia ukończenie całego przetwarzania, w tym obsługę zdarzeń asynchronicznych dla przekierowanych standardowych danych wyjściowych. Tego przeciążenia należy użyć po wywołaniu WaitForExit(Int32) przeciążenia, gdy standardowe dane wyjściowe zostały przekierowane do asynchronicznych procedur obsługi zdarzeń.

Po zakończeniu skojarzonego procesu (czyli po zamknięciu przez system operacyjny przez normalne lub nietypowe zakończenie), system przechowuje informacje administracyjne o procesie i wraca do składnika, który został wywołany WaitForExit(). Składnik Process może następnie uzyskać dostęp do informacji, które obejmują ExitTimeelement , przy użyciu Handle elementu do zakończenia procesu.

Ponieważ skojarzony proces zakończył działanie, Handle właściwość składnika nie wskazuje już istniejącego zasobu procesu. Zamiast tego dojście może służyć tylko do uzyskiwania dostępu do informacji o zasobie procesu systemu operacyjnego. System jest świadomy dojść do procesów, które nie zostały zwolnione przez Process składniki, więc przechowuje ExitTime informacje i Handle w pamięci, dopóki Process składnik nie zwolni zasobów. Z tego powodu za każdym razem, gdy wywołasz StartProcess wystąpienie, wywołaj Close wywołanie po zakończeniu skojarzonego procesu i nie potrzebujesz już żadnych informacji administracyjnych dotyczących tego wystąpienia. Close zwalnia pamięć przydzieloną do zakończenia procesu.

Zobacz też

Dotyczy

WaitForExit(Int32)

Źródło:
Process.cs
Źródło:
Process.cs
Źródło:
Process.cs

Nakazuje Process składnikowi oczekiwanie określonej liczby milisekund na zakończenie skojarzonego procesu.

public:
 bool WaitForExit(int milliseconds);
public bool WaitForExit (int milliseconds);
member this.WaitForExit : int -> bool
Public Function WaitForExit (milliseconds As Integer) As Boolean

Parametry

milliseconds
Int32

Czas oczekiwania na zakończenie skojarzonego procesu w milisekundach. Wartość 0 określa natychmiastowy zwrot, a wartość -1 określa nieskończone oczekiwanie.

Zwraca

true jeśli skojarzony proces zakończył się; w przeciwnym razie , false.

Wyjątki

Nie można uzyskać dostępu do ustawienia oczekiwania.

Nie ustawiono żadnego procesu Id , Handle a właściwość, z której Id można określić, nie istnieje.

-lub-

Brak procesu skojarzonego z tym Process obiektem.

-lub-

Próbujesz wywołać WaitForExit(Int32) proces uruchomiony na komputerze zdalnym. Ta metoda jest dostępna tylko w przypadku procesów uruchomionych na komputerze lokalnym.

milliseconds jest liczbą ujemną inną niż -1, która reprezentuje nieskończony limit czasu.

Przykłady

Zobacz przykładowy kod dla ExitCode właściwości .

Uwagi

WaitForExit(Int32) Sprawia, że bieżący wątek czeka na zakończenie skojarzonego procesu. Powinna być wywoływana po wywołaniu wszystkich innych metod w procesie. Aby uniknąć blokowania bieżącego wątku Exited , użyj zdarzenia .

Ta metoda instruuje Process składnikowi, aby poczekał skończony czas na zakończenie procesu. Jeśli skojarzony proces nie zakończy się do końca interwału, ponieważ żądanie zakończenia zostanie odrzucone, false zostanie zwrócony do procedury wywołującej. Można określić Timeout.Infinite dla , i Process.WaitForExit(Int32) będzie zachowywać się tak samo jak WaitForExit() przeciążeniemilliseconds. Jeśli przekazujesz metodę 0 (zero), zwraca ona wartość true tylko wtedy, gdy proces został już zakończony. W przeciwnym razie natychmiast zwraca wartość false.

Uwaga

W .NET Framework 3.5 i starszych wersjach, jeśli milliseconds wynosi -1, WaitForExit(Int32) przeciążenie czekało na MaxValue milisekundy (około 24 dni), nie przez czas nieokreślony.

Gdy standardowe dane wyjściowe zostały przekierowane do asynchronicznych procedur obsługi zdarzeń, przetwarzanie danych wyjściowych nie zostanie ukończone po zdaniu tej metody. Aby upewnić się, że obsługa zdarzeń asynchronicznych została ukończona, wywołaj WaitForExit() przeciążenie, które nie przyjmuje parametru po otrzymaniu true z tego przeciążenia. Aby upewnić się, że Exited zdarzenie jest poprawnie obsługiwane w aplikacjach Windows Forms, ustaw SynchronizingObject właściwość .

Po zakończeniu skojarzonego procesu (jest zamykany przez system operacyjny przez normalne lub nietypowe zakończenie), system przechowuje informacje administracyjne o procesie i wraca do składnika, który został wywołany WaitForExit(Int32). Składnik Process może następnie uzyskać dostęp do informacji, które obejmują ExitTimeelement , przy użyciu Handle elementu do zakończenia procesu.

Ponieważ skojarzony proces zakończył działanie, Handle właściwość składnika nie wskazuje już istniejącego zasobu procesu. Zamiast tego dojście może służyć tylko do uzyskiwania dostępu do informacji o zasobie procesu systemu operacyjnego. System jest świadomy dojść do procesów, które nie zostały zwolnione przez Process składniki, więc przechowuje ExitTime informacje i Handle w pamięci, dopóki Process składnik nie zwolni zasobów. Z tego powodu za każdym razem, gdy wywołasz StartProcess wystąpienie, wywołaj Close wywołanie po zakończeniu skojarzonego procesu i nie potrzebujesz już żadnych informacji administracyjnych dotyczących tego wystąpienia. Close zwalnia pamięć przydzieloną do zakończenia procesu.

Zobacz też

Dotyczy

WaitForExit(TimeSpan)

Źródło:
Process.cs
Źródło:
Process.cs
Źródło:
Process.cs

Instruuje składnik Procesu, aby poczekał określony czas na zakończenie skojarzonego procesu.

public:
 bool WaitForExit(TimeSpan timeout);
public bool WaitForExit (TimeSpan timeout);
member this.WaitForExit : TimeSpan -> bool
Public Function WaitForExit (timeout As TimeSpan) As Boolean

Parametry

timeout
TimeSpan

Czas oczekiwania na zakończenie skojarzonego procesu.

Zwraca

true jeśli skojarzony proces zakończył się; w przeciwnym razie , false.

Uwagi

Zobacz WaitForExit(Int32) uwagi.

Dotyczy