次の方法で共有


Process.WaitForExit メソッド

定義

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

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

オーバーロード

名前 説明
WaitForExit()

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

WaitForExit(Int32)

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

WaitForExit(TimeSpan)

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

WaitForExit()

ソース:
Process.cs
ソース:
Process.cs
ソース:
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() オーバーロードは無期限ではなく、 MaxValue ミリ秒 (約 24 日間) 待機しました。 また、以前のバージョンでは、完全な MaxValue 時間に達した場合にイベント ハンドラーが終了するまで待機しませんでした。

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

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

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

こちらもご覧ください

適用対象

WaitForExit(Int32)

ソース:
Process.cs
ソース:
Process.cs
ソース:
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 は呼び出し元のプロシージャに返されます。 millisecondsTimeout.Infiniteを指定できます。Process.WaitForExit(Int32)WaitForExit()オーバーロードと同じように動作します。 メソッドに 0 (ゼロ) を渡すと、プロセスが既に終了している場合にのみ true が返されます。それ以外の場合は、すぐに falseを返します。

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

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

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

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

こちらもご覧ください

適用対象

WaitForExit(TimeSpan)

ソース:
Process.cs
ソース:
Process.cs
ソース:
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)解説を参照してください。

適用対象