Process.WaitForExit メソッド

定義

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

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

オーバーロード

WaitForExit()

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

WaitForExit(Int32)

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

WaitForExit(TimeSpan)

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

WaitForExit()

ソース:
Process.cs
ソース:
Process.cs
ソース:
Process.cs

関連付けられたプロセスが終了するまで無期限に待機するように 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 の情報をメモリに保持します。 このため、インスタンスをProcess呼び出すたびに、関連付けられたプロセスが終了し、それに関する管理情報が不要になったときに を呼び出StartCloseします。 Close は、終了したプロセスに割り当てられたメモリを解放します。

こちらもご覧ください

適用対象

WaitForExit(Int32)

ソース:
Process.cs
ソース:
Process.cs
ソース:
Process.cs

関連付けられたプロセスが終了するまで、最大で指定したミリ秒間待機するように 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 の場合は無期限に待機することを示します。

戻り値

関連付けられたプロセスが終了した場合は 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

注意

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

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

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

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

こちらもご覧ください

適用対象

WaitForExit(TimeSpan)

ソース:
Process.cs
ソース:
Process.cs
ソース:
Process.cs

関連付けられたプロセスが終了するまで、指定した時間待機するように 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

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

戻り値

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

注釈

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

適用対象