Process.WaitForExit メソッド

定義

関連付けられたプロセスが終了するまで待機する時間を設定し、指定した時間が経過するかプロセスが終了するまで現在のスレッドの実行をブロックします。 現在のスレッドがブロックされないようにする場合は、Exited イベントを使用します。

コード例については、StandardError および ExitCode プロパティのリファレンス ページを参照してください。

オーバーロード

WaitForExit()

関連付けられたプロセスが終了するまで無期限に待機するように Process コンポーネントに指示します。

WaitForExit(Int32)

関連付けられたプロセスが終了するまで、最大で指定したミリ秒間待機するように Process コンポーネントに指示します。

WaitForExit()

関連付けられたプロセスが終了するまで無期限に待機するように Process コンポーネントに指示します。

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

例外

待機の設定にアクセスできませんでした。

プロセス Id が設定されておらず、Id プロパティを判別する元となる Handle が存在しません。

または この Process オブジェクトに関連付けられているプロセスはありません。

または リモート コンピューターで実行されているプロセスの WaitForExit() を呼び出そうとしています。 このメソッドはローカル コンピューターで実行中のプロセスに対してのみ使用可能です。

プロパティ参照ページの「解説」セクションを StandardError 参照してください。

注釈

WaitForExit() は、関連付けられているプロセスが終了するまで、現在のスレッドを待機させます。 プロセスで他のすべてのメソッドが呼び出された後で呼び出す必要があります。 現在のスレッドがブロックされないようにする場合は、Exited イベントを使用します。

このメソッドは、 Process プロセスとイベント ハンドラーが終了するまで、無限の時間待機するようにコンポーネントに指示します。 これにより、アプリケーションが応答を停止する可能性があります。 たとえば、ユーザー インターフェイスを持つプロセスを呼び出 CloseMainWindow した場合、プロセスがメッセージ ループに入らないよう書き込まれた場合、オペレーティング システムに関連付けられているプロセスを終了する要求は処理されない場合があります。

注意

.NET Framework 3.5 以前のバージョンでは、WaitForExit()オーバーロードは無期限ではなくミリ秒 (約 24 日間) 待機しましたMaxValue。 また、以前のバージョンでは、完全 MaxValue な時間に達した場合にイベント ハンドラーが終了するまで待機しませんでした。

このオーバーロードにより、リダイレクトされた標準出力の非同期イベントの処理を含め、すべての処理が完了したことが保証されます。 標準出力が非同期イベント ハンドラーにリダイレクトされた場合は、オーバーロードの WaitForExit(Int32) 呼び出し後にこのオーバーロードを使用する必要があります。

関連付けられたプロセスが終了すると (つまり、通常の終了または異常終了によってオペレーティング システムによってシャットダウンされた場合)、システムはプロセスに関する管理情報を格納し、呼び出 WaitForExit()したコンポーネントに戻ります。 その後、コンポーネントはProcess、終了したプロセスを使用Handleして、情報 (その情報を含むExitTime) にアクセスできます。

関連付けられたプロセスが終了したため、コンポーネントの Handle プロパティは既存のプロセス リソースを指し示さなくなりました。 代わりに、ハンドルは、プロセス リソースに関するオペレーティング システムの情報にアクセスするためだけに使用できます。 システムは、コンポーネントによってProcess解放されていない終了したプロセスに対するハンドルを認識するため、コンポーネントがリソースを明示的に解放するまでProcess、メモリ内の情報とHandle情報を保持ExitTimeします。 このため、インスタンスを呼び出StartProcessすたびに、関連付けられているプロセスが終了したときに呼び出Closeし、それに関する管理情報は不要になります。 Close は、終了したプロセスに割り当てられたメモリを解放します。

こちらもご覧ください

適用対象

WaitForExit(Int32)

関連付けられたプロセスが終了するまで、最大で指定したミリ秒間待機するように Process コンポーネントに指示します。

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

パラメーター

milliseconds
Int32

関連付けられたプロセスが終了するまで待機する時間。単位はミリ秒です。 値 0 の場合はすぐに制御が戻され、値 -1 の場合は無期限に待機することを示します。

戻り値

Boolean

関連付けられたプロセスが終了した場合は true。それ以外の場合は false

例外

待機の設定にアクセスできませんでした。

プロセス Id が設定されておらず、Id プロパティを判別する元となる Handle が存在しません。

または この Process オブジェクトに関連付けられているプロセスはありません。

または リモート コンピューターで実行されているプロセスの WaitForExit(Int32) を呼び出そうとしています。 このメソッドはローカル コンピューターで実行中のプロセスに対してのみ使用可能です。

milliseconds は無限のタイムアウトを表す -1 以外の負の数です。

プロパティのコード例を ExitCode 参照してください。

注釈

WaitForExit(Int32) は、関連付けられているプロセスが終了するまで、現在のスレッドを待機させます。 プロセスで他のすべてのメソッドが呼び出された後で呼び出す必要があります。 現在のスレッドがブロックされないようにする場合は、Exited イベントを使用します。

このメソッドは、プロセスが Process 終了するまで一定の時間待機するようにコンポーネントに指示します。 終了する要求が拒否されたために、関連するプロセスが間隔の終わりまでに終了しない場合は、 false 呼び出し元のプロシージャに返されます。 に指定Timeout.Infinitemillisecondsでき、オーバーロードとProcess.WaitForExit(Int32)同じように動作しますWaitForExit()。 メソッドに 0 (ゼロ) を渡すと、プロセスが既に終了している場合にのみ返 true されます。それ以外の場合は、すぐに返されます false

注意

.NET Framework 3.5 以前のバージョンでは、-1 の場合millisecondsWaitForExit(Int32)オーバーロードは無期限ではなくミリ秒 (約 24 日間) 待機していましたMaxValue

標準出力が非同期イベント ハンドラーにリダイレクトされた場合、このメソッドが返されるときに出力処理が完了していない可能性があります。 非同期イベント処理が完了したことを確認するには、このオーバーロードから a を WaitForExit() 受け取った後にパラメーターを受け取らないオーバーロードを true 呼び出します。 Windows フォーム アプリケーションでイベントが正しく処理されるようにExitedするには、プロパティを設定しますSynchronizingObject

関連付けられたプロセスが終了すると (通常または異常終了によってオペレーティング システムによってシャットダウンされます)、システムはプロセスに関する管理情報を格納し、呼び出 WaitForExit(Int32)したコンポーネントに戻ります。 その後、コンポーネントはProcess、終了したプロセスを使用Handleして、情報 (その情報を含むExitTime) にアクセスできます。

関連付けられたプロセスが終了したため、コンポーネントの Handle プロパティは既存のプロセス リソースを指し示さなくなりました。 代わりに、ハンドルは、プロセス リソースに関するオペレーティング システムの情報にアクセスするためだけに使用できます。 システムは、コンポーネントによってProcess解放されていない終了したプロセスに対するハンドルを認識するため、コンポーネントがリソースを明示的に解放するまでProcess、メモリ内の情報とHandle情報を保持ExitTimeします。 このため、インスタンスを呼び出StartProcessすたびに、関連付けられているプロセスが終了したときに呼び出Closeし、それに関する管理情報は不要になります。 Close は、終了したプロセスに割り当てられたメモリを解放します。

こちらもご覧ください

適用対象