ThreadPool.RegisterWaitForSingleObject メソッド (WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)
2013/03/11
ミリ秒単位のタイムアウト値を 64 ビット符号付き整数で指定して、WaitHandle を待機するデリゲートを登録します。
アセンブリ: mscorlib (mscorlib.dll 内)
public static RegisteredWaitHandle RegisterWaitForSingleObject( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, long millisecondsTimeOutInterval, bool executeOnlyOnce )
パラメーター
- waitObject
- 型: System.Threading.WaitHandle
登録する待機ハンドル。
- callBack
- 型: System.Threading.WaitOrTimerCallback
waitObject パラメーターが通知されたときに呼び出すデリゲート。
- state
- 型: System.Object
代行に渡されたオブジェクト。
- millisecondsTimeOutInterval
- 型: System.Int64
ミリ秒単位のタイムアウト。millisecondsTimeOutInterval パラメーターが 0 (ゼロ) の場合、この関数はオブジェクトの状態をテストし、直ちに値を返します。millisecondsTimeOutInterval が -1 の場合、関数のタイムアウト間隔が経過することはありません。
- executeOnlyOnce
- 型: System.Boolean
デリゲートの呼び出し後、スレッドが waitObject パラメーターを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマーをリセットする場合は false。
| 例外 | 条件 |
|---|---|
| ArgumentOutOfRangeException | millisecondsTimeOutInterval パラメーターが -1 未満です。 |
このメソッドによって返される RegisteredWaitHandle を使い終わったら、その RegisteredWaitHandle.Unregister メソッドを呼び出して待機ハンドルへの参照を解放します。executeOnlyOnce に true を指定したとしても、RegisteredWaitHandle.Unregister メソッドは常に呼び出すことをお勧めします。登録された待機ハンドルのファイナライザーに依存するのではなく、RegisteredWaitHandle.Unregister メソッドを呼び出すことで、ガベージ コレクションはより効率的に動作します。
RegisterWaitForSingleObject メソッドは、指定したデリゲートをスレッド プールのキューに置きます。次のいずれかが発生すると、ワーカー スレッドはデリゲートを実行します。
指定したオブジェクトがシグナル状態です。
タイムアウト間隔が経過します。
RegisterWaitForSingleObject メソッドは、指定したオブジェクトの WaitHandle の現在の状態をチェックします。オブジェクトの状態が非シグナル状態である場合、このメソッドは待機操作を登録します。待機操作は、スレッド プールのスレッドによって実行されます。オブジェクトの状態がシグナル状態になると、またはタイムアウト間隔が経過すると、デリゲートがワーカー スレッドによって実行されます。timeOutInterval パラメーターが 0 (ゼロ) 以外で、executeOnlyOnce パラメーターが false である場合は、イベントがシグナル状態になるたびに、またはタイムアウト間隔が経過するたびにタイマーがリセットされます。
待機操作をキャンセルするには、RegisteredWaitHandle.Unregister メソッドを呼び出します。
このメソッドは、戻る前に、同期オブジェクトのいくつかの型の状態を変更します。変更は、シグナル状態によって待機条件が満たされたオブジェクトに対してだけ発生します。
バージョンについてのメモ
Windows Phone
ユーザーが Windows Phone アプリケーションから進む場合、アプリケーションは通常、休止状態になります。ユーザーが休止状態に戻ると、アプリケーションは自動的に再開されます。この API が使用されている間にアプリケーションが休止状態になった場合、API は意図したとおりには完了しません。アプリケーションは、この可能性に対処するように設定されている必要があります。Windows Phone 実行モデルの詳細については、「Windows Phone の実行モデル」を参照してください。