Process.WaitForExit メソッド

定義

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

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

オーバーロード

WaitForExit()

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

WaitForExit(Int32)

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

WaitForExit(TimeSpan)

関連付けられたプロセスが終了するまで、指定した時間待機するように 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解放されていない終了したプロセスへのハンドルを認識するため、コンポーネントがリソースをExitTime明示的に解放するまでProcess、 と Handle の情報をメモリに保持します。 このため、インスタンスを呼び出すたびに、関連付けられたプロセスが終了し、それに関する管理情報が不要になったときに を呼び出 StartProcessClose します。 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 が呼び出し元のプロシージャに返されます。 には をmilliseconds指定Timeout.Infiniteでき、オーバーロードとProcess.WaitForExit(Int32)同じようにWaitForExit()動作します。 メソッドに 0 (ゼロ) を渡すと、プロセスが既に終了している場合にのみ が返 true されます。それ以外の場合は、直ちに を返します false

Note

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

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

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

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

こちらもご覧ください

適用対象

WaitForExit(TimeSpan)

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

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

パラメーター

timeout
TimeSpan

関連付けられたプロセスが終了するまで待機する時間。

戻り値

Boolean

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

注釈

解説を参照してください WaitForExit(Int32)

適用対象