Process.WaitForExit Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
true
pokud 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 milliseconds
a 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í false
hodnotu .
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
true
pokud byl přidružený proces ukončen; v opačném případě . false
Poznámky
Podívejte se WaitForExit(Int32) na poznámky.