Process.WaitForExit Metoda

Definice

Nastaví dobu čekání na ukončení přidruženého procesu a zablokuje aktuální vlákno provádění, dokud čas uplynou nebo se proces ukončí. Pokud chcete zabránit blokování aktuálního vlákna, použijte Exited událost.

Příklady kódu najdete na stránkách odkazu na StandardError vlastnosti a ExitCode .

Přetížení

WaitForExit()

Dá komponentě pokyn Process , aby po neomezenou dobu čekala na ukončení přidruženého procesu.

WaitForExit(Int32)

Dá komponentě Process pokyn, aby počkala na zadaný počet milisekund, než se přidružený proces ukončí.

WaitForExit(TimeSpan)

Dá komponentě Proces pokyn, aby počkala zadanou dobu na ukončení přidruženého procesu.

WaitForExit()

Zdroj:
Process.cs
Zdroj:
Process.cs
Zdroj:
Process.cs

Dá komponentě pokyn Process , aby po neomezenou dobu čekala na ukončení přidruženého procesu.

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

Výjimky

K nastavení čekání nelze získat přístup.

Nebyl nastaven žádný proces Id a Handle vlastnost, ze které Id lze zjistit, neexistuje.

-nebo-

K tomuto Process objektu není přidružen žádný proces.

-nebo-

Pokoušíte se volat WaitForExit() proces, který běží na vzdáleném počítači. Tato metoda je k dispozici pouze pro procesy spuštěné v místním počítači.

Příklady

Viz část Poznámky na stránce s odkazem na StandardError vlastnost.

Poznámky

WaitForExit() způsobí, že aktuální vlákno počká, dokud se přidružený proces neskončí. Měl by být volána po zavolání všech ostatních metod v procesu. Pokud chcete zabránit blokování aktuálního vlákna, použijte Exited událost.

Tato metoda dává komponentě Process pokyn, aby čekala nekonečné množství času, než se obslužné rutiny procesu a událostí ukončí. To může způsobit, že aplikace přestane reagovat. Pokud například zavoláte CloseMainWindow proces, který má uživatelské rozhraní, nemusí být požadavek operačního systému na ukončení přidruženého procesu zpracován, pokud je proces zapsán tak, aby nikdy nevstupoval do smyčky zpráv.

Poznámka

V rozhraní .NET Framework 3.5 a starších verzích WaitForExit() přetížení čekalo na MaxValue milisekundy (přibližně 24 dnů), nikoli na neomezenou dobu. Předchozí verze také nečekaly na ukončení obslužných rutin událostí, pokud bylo dosaženo plného MaxValue času.

Toto přetížení zajišťuje, že bylo dokončeno veškeré zpracování, včetně zpracování asynchronních událostí pro přesměrovaný standardní výstup. Toto přetížení byste měli použít po volání WaitForExit(Int32) přetížení, když byl standardní výstup přesměrován na asynchronní obslužné rutiny událostí.

Když se přidružený proces ukončí (tj. když ho operační systém vypne normálním nebo neobvyklým ukončením), systém uloží informace o procesu pro správu a vrátí se do komponenty s názvem WaitForExit(). Komponenta Process pak může získat přístup k informacím, mezi které patří ExitTime, pomocí Handle procesu ukončení.

Vzhledem k tomu, že přidružený proces byl ukončen, Handle vlastnost komponenty již odkazuje na existující prostředek procesu. Místo toho lze popisovač použít pouze pro přístup k informacím operačního systému o prostředku procesu. Systém si je vědom popisovačů ukončených procesů, které nebyly uvolněny komponentami Process , takže uchovává ExitTime informace a Handle v paměti, dokud Process komponenta výslovně neuvolní prostředky. Z tohoto důvodu kdykoli zavoláte instanciProcess, zavolejte StartClose, když se přidružený proces ukončil a už o něm nepotřebujete žádné administrativní informace. Close uvolní paměť přidělenou pro ukončený proces.

Viz také

Platí pro

WaitForExit(Int32)

Zdroj:
Process.cs
Zdroj:
Process.cs
Zdroj:
Process.cs

Dá komponentě Process pokyn, aby počkala na zadaný počet milisekund, než se přidružený proces ukončí.

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

Doba čekání na ukončení přidruženého procesu v milisekundách. Hodnota 0 určuje okamžité vrácení a hodnota -1 určuje nekonečné čekání.

Návraty

truepokud byl přidružený proces ukončen; v opačném případě . false

Výjimky

K nastavení čekání nelze získat přístup.

Nebyl nastaven žádný proces Id a Handle vlastnost, ze které Id lze zjistit, neexistuje.

-nebo-

K tomuto Process objektu není přidružen žádný proces.

-nebo-

Pokoušíte se volat WaitForExit(Int32) proces, který běží na vzdáleném počítači. Tato metoda je k dispozici pouze pro procesy spuštěné v místním počítači.

milliseconds je záporné číslo jiné než -1, které představuje nekonečný časový limit.

Příklady

Podívejte se na příklad kódu pro vlastnost ExitCode .

Poznámky

WaitForExit(Int32) způsobí, že aktuální vlákno počká, dokud se přidružený proces neskončí. Měl by být volána po zavolání všech ostatních metod v procesu. Pokud chcete zabránit blokování aktuálního vlákna, použijte Exited událost.

Tato metoda dává komponentě Process pokyn, aby čekala omezenou dobu na ukončení procesu. Pokud se přidružený proces do konce intervalu neukončí, protože požadavek na ukončení je odepřen, false vrátí se volající proceduře. Můžete zadat Timeout.Infinite pro millisecondsa Process.WaitForExit(Int32) bude se chovat stejně jako přetížení WaitForExit() . Pokud metodě předáte hodnotu 0 (nula), vrátí true se pouze v případě, že proces již byl ukončen; v opačném případě okamžitě vrátí falsehodnotu .

Poznámka

V rozhraní .NET Framework 3.5 a starších verzích, pokud milliseconds byla hodnota -1, WaitForExit(Int32) přetížení čekalo milisekundy MaxValue (přibližně 24 dní), ne neomezeně.

Pokud je standardní výstup přesměrován na asynchronní obslužné rutiny událostí, je možné, že zpracování výstupu se při vrácení této metody nedokončilo. Chcete-li zajistit, že asynchronní zpracování událostí bylo dokončeno, zavolejte WaitForExit() přetížení, které nepřijímá žádný parametr po přijetí true z tohoto přetížení. Pokud chcete zajistit správné Exited zpracování události v model Windows Forms aplikacích, nastavte SynchronizingObject vlastnost .

Když se přidružený proces ukončí (operační systém ho vypne normálním nebo neobvyklým ukončením), systém uloží informace o procesu pro správu a vrátí se do komponenty, která volala WaitForExit(Int32). Komponenta Process pak může získat přístup k informacím, mezi které patří ExitTime, pomocí Handle procesu ukončení.

Vzhledem k tomu, že přidružený proces byl ukončen, Handle vlastnost komponenty již odkazuje na existující prostředek procesu. Místo toho lze popisovač použít pouze pro přístup k informacím operačního systému o prostředku procesu. Systém si je vědom popisovačů ukončených procesů, které nebyly uvolněny komponentami Process , takže uchovává ExitTime informace a Handle v paměti, dokud Process komponenta výslovně neuvolní prostředky. Z tohoto důvodu kdykoli zavoláte instanciProcess, zavolejte StartClose, když se přidružený proces ukončil a už o něm nepotřebujete žádné administrativní informace. Close uvolní paměť přidělenou pro ukončený proces.

Viz také

Platí pro

WaitForExit(TimeSpan)

Zdroj:
Process.cs
Zdroj:
Process.cs
Zdroj:
Process.cs

Dá komponentě Proces pokyn, aby počkala zadanou dobu na ukončení přidruženého 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

Doba čekání na ukončení přidruženého procesu.

Návraty

truepokud byl přidružený proces ukončen; v opačném případě . false

Poznámky

Podívejte se WaitForExit(Int32) na poznámky.

Platí pro