ThreadPool.RegisterWaitForSingleObject メソッド (WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)
アセンブリ: mscorlib (mscorlib.dll 内)

<CLSCompliantAttribute(False)> _ Public Shared Function RegisterWaitForSingleObject ( _ waitObject As WaitHandle, _ callBack As WaitOrTimerCallback, _ state As Object, _ millisecondsTimeOutInterval As UInteger, _ executeOnlyOnce As Boolean _ ) As RegisteredWaitHandle
Dim waitObject As WaitHandle Dim callBack As WaitOrTimerCallback Dim state As Object Dim millisecondsTimeOutInterval As UInteger Dim executeOnlyOnce As Boolean Dim returnValue As RegisteredWaitHandle returnValue = ThreadPool.RegisterWaitForSingleObject(waitObject, callBack, state, millisecondsTimeOutInterval, executeOnlyOnce)
[CLSCompliantAttribute(false)] public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce )
[CLSCompliantAttribute(false)] public: static RegisteredWaitHandle^ RegisterWaitForSingleObject ( WaitHandle^ waitObject, WaitOrTimerCallback^ callBack, Object^ state, unsigned int millisecondsTimeOutInterval, bool executeOnlyOnce )
/** @attribute CLSCompliantAttribute(false) */ public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, UInt32 millisecondsTimeOutInterval, boolean executeOnlyOnce )
CLSCompliantAttribute(false) public static function RegisterWaitForSingleObject ( waitObject : WaitHandle, callBack : WaitOrTimerCallback, state : Object, millisecondsTimeOutInterval : uint, executeOnlyOnce : boolean ) : RegisteredWaitHandle
- waitObject
登録する WaitHandle。
- millisecondsTimeOutInterval
ミリ秒単位のタイムアウト。millisecondsTimeOutInterval パラメータが 0 の場合、関数はオブジェクトの状態をテストして、すぐに返します。millisecondsTimeOutInterval が -1 の場合、関数のタイムアウト間隔が経過することはありません。
- executeOnlyOnce
デリゲートの呼び出し後、スレッドが waitObject パラメータを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマをリセットする場合は false。
登録された待機操作をキャンセルするために使用できる RegisteredWaitHandle。


RegisterWaitForSingleObject メソッドは、指定したデリゲートをスレッド プールのキューに置きます。次のいずれかが発生すると、ワーカー スレッドはデリゲートを実行します。
RegisterWaitForSingleObject メソッドは、指定したオブジェクトの WaitHandle の現在の状態をチェックします。オブジェクトの状態が非シグナル状態である場合、このメソッドは待機操作を登録します。待機操作は、スレッド プールのスレッドによって実行されます。オブジェクトの状態がシグナル状態になると、またはタイムアウト間隔が経過すると、デリゲートがワーカー スレッドによって実行されます。timeOutInterval パラメータが 0 以外で、executeOnlyOnce パラメータが false である場合は、イベントがシグナル状態になるたびに、またはタイムアウト間隔が経過するたびにタイマがリセットされます。
待機操作をキャンセルするには、RegisteredWaitHandle.Unregister メソッドを呼び出します。
待機スレッドは、Win32 の WaitForMultipleObjects 関数を使用して、登録された待機操作を監視します。このため、RegisterWaitForSingleObject を複数回呼び出すときに同じネイティブ オペレーティング システム ハンドルを使用する必要がある場合は、Win32 DuplicateHandle 関数を使用してハンドルを複製する必要があります。RegisterWaitForSingleObject に渡されたイベント オブジェクトにパルスを送ることはできません。これは、待機スレッドはリセットされるまでイベントがシグナル状態であることを検出できないためです。
この関数は、戻る前に、同期オブジェクトのいくつかの型の状態を変更します。変更は、シグナル状態によって待機条件が満たされたオブジェクトに対してだけ発生します。たとえば、セマフォの数が 1 つ減らされます。
バージョン情報
Imports System Imports System.Threading ' TaskInfo contains data that will be passed to the callback ' method. Public Class TaskInfo public Handle As RegisteredWaitHandle = Nothing public OtherInfo As String = "default" End Class Public Class Example <MTAThread> _ Public Shared Sub Main() ' The main thread uses AutoResetEvent to signal the ' registered wait handle, which executes the callback ' method. Dim ev As New AutoResetEvent(false) Dim ti As New TaskInfo() ti.OtherInfo = "First task" ' The TaskInfo for the task includes the registered wait ' handle returned by RegisterWaitForSingleObject. This ' allows the wait to be terminated when the object has ' been signaled once (see WaitProc). ti.Handle = ThreadPool.RegisterWaitForSingleObject( _ ev, _ New WaitOrTimerCallback(AddressOf WaitProc), _ ti, _ 1000, _ false _ ) ' The main thread waits about three seconds, to demonstrate ' the time-outs on the queued task, and then signals. Thread.Sleep(3100) Console.WriteLine("Main thread signals.") ev.Set() ' The main thread sleeps, which should give the callback ' method time to execute. If you comment out this line, the ' program usually ends before the ThreadPool thread can execute. Thread.Sleep(1000) ' If you start a thread yourself, you can wait for it to end ' by calling Thread.Join. This option is not available with ' thread pool threads. End Sub ' The callback method executes when the registered wait times out , ' or when the WaitHandle (in this case AutoResetEvent) is signaled. ' WaitProc unregisters the WaitHandle the first time the event is ' signaled. Public Shared Sub WaitProc(state As Object, timedOut As Boolean) ' The state object must be cast to the correct type, because the ' signature of the WaitOrTimerCallback delegate specifies type ' Object. Dim ti As TaskInfo = CType(state, TaskInfo) Dim cause As String = "TIMED OUT" If Not timedOut Then cause = "SIGNALED" ' If the callback method executes because the WaitHandle is ' signaled, stop future execution of the callback method ' by unregistering the WaitHandle. If Not ti.Handle Is Nothing Then ti.Handle.Unregister(Nothing) End If End If Console.WriteLine("WaitProc( {0} ) executes on thread {1}; cause = {2}.", _ ti.OtherInfo, _ Thread.CurrentThread.GetHashCode().ToString(), _ cause _ ) End Sub End Class
using System; using System.Threading; // TaskInfo contains data that will be passed to the callback // method. public class TaskInfo { public RegisteredWaitHandle Handle = null; public string OtherInfo = "default"; } public class Example { public static void Main(string[] args) { // The main thread uses AutoResetEvent to signal the // registered wait handle, which executes the callback // method. AutoResetEvent ev = new AutoResetEvent(false); TaskInfo ti = new TaskInfo(); ti.OtherInfo = "First task"; // The TaskInfo for the task includes the registered wait // handle returned by RegisterWaitForSingleObject. This // allows the wait to be terminated when the object has // been signaled once (see WaitProc). ti.Handle = ThreadPool.RegisterWaitForSingleObject( ev, new WaitOrTimerCallback(WaitProc), ti, 1000, false ); // The main thread waits three seconds, to demonstrate the // time-outs on the queued thread, and then signals. Thread.Sleep(3100); Console.WriteLine("Main thread signals."); ev.Set(); // The main thread sleeps, which should give the callback // method time to execute. If you comment out this line, the // program usually ends before the ThreadPool thread can execute. Thread.Sleep(1000); // If you start a thread yourself, you can wait for it to end // by calling Thread.Join. This option is not available with // thread pool threads. } // The callback method executes when the registered wait times out , // or when the WaitHandle (in this case AutoResetEvent) is signaled. // WaitProc unregisters the WaitHandle the first time the event is // signaled. public static void WaitProc(object state, bool timedOut) { // The state object must be cast to the correct type, because the // signature of the WaitOrTimerCallback delegate specifies type // Object. TaskInfo ti = (TaskInfo) state; string cause = "TIMED OUT"; if (!timedOut) { cause = "SIGNALED"; // If the callback method executes because the WaitHandle is // signaled, stop future execution of the callback method // by unregistering the WaitHandle. if (ti.Handle != null) ti.Handle.Unregister(null); } Console.WriteLine("WaitProc( {0} ) executes on thread {1}; cause = {2}." , ti.OtherInfo, Thread.CurrentThread.GetHashCode().ToString(), cause ); } }
using namespace System; using namespace System::Threading; // TaskInfo contains data that will be passed to the callback // method. public ref class TaskInfo { public: TaskInfo() { Handle = nullptr; OtherInfo = "default"; } RegisteredWaitHandle^ Handle; String^ OtherInfo; }; ref class Example { public: // The callback method executes when the registered wait times out , // or when the WaitHandle (in this case AutoResetEvent) is signaled. // WaitProc unregisters the WaitHandle the first time the event is // signaled. static void WaitProc( Object^ state, bool timedOut ) { // The state Object must be cast to the correct type, because the // signature of the WaitOrTimerCallback delegate specifies type // Object. TaskInfo^ ti = static_cast<TaskInfo^>(state); String^ cause = "TIMED OUT"; if ( !timedOut ) { cause = "SIGNALED"; // If the callback method executes because the WaitHandle is // signaled, stop future execution of the callback method // by unregistering the WaitHandle. if ( ti->Handle != nullptr ) ti->Handle->Unregister( nullptr ); } Console::WriteLine( "WaitProc( {0}) executes on thread {1}; cause = {2}.", ti->OtherInfo, Thread::CurrentThread->GetHashCode(), cause ); } }; int main() { // The main thread uses AutoResetEvent to signal the // registered wait handle, which executes the callback // method. AutoResetEvent^ ev = gcnew AutoResetEvent( false ); TaskInfo^ ti = gcnew TaskInfo; ti->OtherInfo = "First task"; // The TaskInfo for the task includes the registered wait // handle returned by RegisterWaitForSingleObject. This // allows the wait to be terminated when the object has // been signaled once (see WaitProc). ti->Handle = ThreadPool::RegisterWaitForSingleObject( ev, gcnew WaitOrTimerCallback( Example::WaitProc ), ti, 1000, false ); // The main thread waits three seconds, to demonstrate the // time-outs on the queued thread, and then signals. Thread::Sleep( 3100 ); Console::WriteLine( "Main thread signals." ); ev->Set(); // The main thread sleeps, which should give the callback // method time to execute. If you comment out this line, the // program usually ends before the ThreadPool thread can execute. Thread::Sleep( 1000 ); // If you start a thread yourself, you can wait for it to end // by calling Thread::Join. This option is not available with // thread pool threads. return 0; }
import System.*; import System.Threading.*; import System.Threading.Thread; // TaskInfo contains data that will be passed to the callback // method. public class TaskInfo { public RegisteredWaitHandle handle = null; public String otherInfo = "default"; } //TaskInfo public class Example { public static void main(String[] args) { // The main thread uses AutoResetEvent to signal the // registered wait Handle, which executes the callback // method. AutoResetEvent ev = new AutoResetEvent(false); TaskInfo ti = new TaskInfo(); ti.otherInfo = "First task"; // The TaskInfo for the task includes the registered wait // Handle returned by RegisterWaitForSingleObject. This // allows the wait to be terminated when the object has // been signaled once (see WaitProc). ti.handle = ThreadPool.RegisterWaitForSingleObject(ev, new WaitOrTimerCallback(WaitProc), ti, 1000, false); // The main thread waits three seconds, to demonstrate the // time-outs on the queued thread, and then signals. Thread.Sleep(3100); Console.WriteLine("Main thread signals."); ev.Set(); // The main thread sleeps, which should give the callback // method time to execute. If you comment out this line, the // program usually ends before the ThreadPool thread can execute. Thread.Sleep(1000); // If you start a thread yourself, you can wait for it to end // by calling Thread.Join. This option is not available with // thread pool threads. } //main // The callback method executes when the registered wait times out , // or when the WaitHandle (in this case AutoResetEvent) is signaled. // WaitProc unregisters the WaitHandle the first time the event is // signaled. public static void WaitProc(Object state, boolean timedOut) { // The state object must be cast to the correct type, because the // signature of the WaitOrTimerCallback delegate specifies type // Object. TaskInfo ti = ((TaskInfo)(state)); String cause = "TIMED OUT"; if (!(timedOut)) { cause = "SIGNALED"; // If the callback method executes because the WaitHandle is // signaled, stop future execution of the callback method // by unregistering the WaitHandle. if (ti.handle != null) { ti.handle.Unregister(null); } } Console.WriteLine("WaitProc( {0} ) executes " + "on thread {1}; cause = {2}.", ti.otherInfo, String.valueOf(Thread.get_CurrentThread().GetHashCode()),cause); } //WaitProc } //Example

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ThreadPool.RegisterWaitForSingleObject メソッド (WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Shared Function RegisterWaitForSingleObject ( _ waitObject As WaitHandle, _ callBack As WaitOrTimerCallback, _ state As Object, _ millisecondsTimeOutInterval As Long, _ executeOnlyOnce As Boolean _ ) As RegisteredWaitHandle
Dim waitObject As WaitHandle Dim callBack As WaitOrTimerCallback Dim state As Object Dim millisecondsTimeOutInterval As Long Dim executeOnlyOnce As Boolean Dim returnValue As RegisteredWaitHandle returnValue = ThreadPool.RegisterWaitForSingleObject(waitObject, callBack, state, millisecondsTimeOutInterval, executeOnlyOnce)
public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, long millisecondsTimeOutInterval, bool executeOnlyOnce )
public: static RegisteredWaitHandle^ RegisterWaitForSingleObject ( WaitHandle^ waitObject, WaitOrTimerCallback^ callBack, Object^ state, long long millisecondsTimeOutInterval, bool executeOnlyOnce )
public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, long millisecondsTimeOutInterval, boolean executeOnlyOnce )
public static function RegisterWaitForSingleObject ( waitObject : WaitHandle, callBack : WaitOrTimerCallback, state : Object, millisecondsTimeOutInterval : long, executeOnlyOnce : boolean ) : RegisteredWaitHandle
- waitObject
登録する WaitHandle。
- millisecondsTimeOutInterval
ミリ秒単位のタイムアウト。millisecondsTimeOutInterval パラメータが 0 の場合、関数はオブジェクトの状態をテストして、すぐに返します。millisecondsTimeOutInterval が -1 の場合、関数のタイムアウト間隔が経過することはありません。
- executeOnlyOnce
デリゲートの呼び出し後、スレッドが waitObject パラメータを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマをリセットする場合は false。
ネイティブ ハンドルをカプセル化する RegisteredWaitHandle。


RegisterWaitForSingleObject メソッドは、指定したデリゲートをスレッド プールのキューに置きます。次のいずれかが発生すると、ワーカー スレッドはデリゲートを実行します。
RegisterWaitForSingleObject メソッドは、指定したオブジェクトの WaitHandle の現在の状態をチェックします。オブジェクトの状態が非シグナル状態である場合、このメソッドは待機操作を登録します。待機操作は、スレッド プールのスレッドによって実行されます。オブジェクトの状態がシグナル状態になると、またはタイムアウト間隔が経過すると、デリゲートがワーカー スレッドによって実行されます。timeOutInterval パラメータが 0 以外で、executeOnlyOnce パラメータが false である場合は、イベントがシグナル状態になるたびに、またはタイムアウト間隔が経過するたびにタイマがリセットされます。
待機操作をキャンセルするには、RegisteredWaitHandle.Unregister メソッドを呼び出します。
待機スレッドは、Win32 の WaitForMultipleObjects 関数を使用して、登録された待機操作を監視します。このため、RegisterWaitForSingleObject を複数回呼び出すときに同じネイティブ オペレーティング システム ハンドルを使用する必要がある場合は、Win32 DuplicateHandle 関数を使用してハンドルを複製する必要があります。RegisterWaitForSingleObject に渡されたイベント オブジェクトにパルスを送ることはできません。これは、待機スレッドはリセットされるまでイベントがシグナル状態であることを検出できないためです。
この関数は、戻る前に、同期オブジェクトのいくつかの型の状態を変更します。変更は、シグナル状態によって待機条件が満たされたオブジェクトに対してだけ発生します。たとえば、セマフォの数が 1 つ減らされます。
バージョン情報
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ThreadPool.RegisterWaitForSingleObject メソッド (WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Shared Function RegisterWaitForSingleObject ( _ waitObject As WaitHandle, _ callBack As WaitOrTimerCallback, _ state As Object, _ timeout As TimeSpan, _ executeOnlyOnce As Boolean _ ) As RegisteredWaitHandle
Dim waitObject As WaitHandle Dim callBack As WaitOrTimerCallback Dim state As Object Dim timeout As TimeSpan Dim executeOnlyOnce As Boolean Dim returnValue As RegisteredWaitHandle returnValue = ThreadPool.RegisterWaitForSingleObject(waitObject, callBack, state, timeout, executeOnlyOnce)
public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, TimeSpan timeout, bool executeOnlyOnce )
public: static RegisteredWaitHandle^ RegisterWaitForSingleObject ( WaitHandle^ waitObject, WaitOrTimerCallback^ callBack, Object^ state, TimeSpan timeout, bool executeOnlyOnce )
public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, TimeSpan timeout, boolean executeOnlyOnce )
public static function RegisterWaitForSingleObject ( waitObject : WaitHandle, callBack : WaitOrTimerCallback, state : Object, timeout : TimeSpan, executeOnlyOnce : boolean ) : RegisteredWaitHandle
- waitObject
登録する WaitHandle。
- timeout
TimeSpan で表されるタイムアウト。timeout が 0 の場合、関数はオブジェクトの状態をテストしてすぐに返します。timeout が -1 の場合、関数のタイムアウト間隔が経過することはありません。
- executeOnlyOnce
デリゲートの呼び出し後、スレッドが waitObject パラメータを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマをリセットする場合は false。
ネイティブ ハンドルをカプセル化する RegisteredWaitHandle。


RegisterWaitForSingleObject メソッドは、指定したデリゲートをスレッド プールのキューに置きます。次のいずれかが発生すると、ワーカー スレッドはデリゲートを実行します。
RegisterWaitForSingleObject メソッドは、指定したオブジェクトの WaitHandle の現在の状態をチェックします。オブジェクトの状態が非シグナル状態である場合、このメソッドは待機操作を登録します。待機操作は、スレッド プールのスレッドによって実行されます。オブジェクトの状態がシグナル状態になると、またはタイムアウト間隔が経過すると、デリゲートがワーカー スレッドによって実行されます。timeOutInterval パラメータが 0 以外で、executeOnlyOnce パラメータが false である場合は、イベントがシグナル状態になるたびに、またはタイムアウト間隔が経過するたびにタイマがリセットされます。
待機操作をキャンセルするには、RegisteredWaitHandle.Unregister メソッドを呼び出します。
待機スレッドは、Win32 の WaitForMultipleObjects 関数を使用して、登録された待機操作を監視します。このため、RegisterWaitForSingleObject を複数回呼び出すときに同じネイティブ オペレーティング システム ハンドルを使用する必要がある場合は、Win32 DuplicateHandle 関数を使用してハンドルを複製する必要があります。RegisterWaitForSingleObject に渡されたイベント オブジェクトにパルスを送ることはできません。これは、待機スレッドはリセットされるまでイベントがシグナル状態であることを検出できないためです。
この関数は、戻る前に、同期オブジェクトのいくつかの型の状態を変更します。変更は、シグナル状態によって待機条件が満たされたオブジェクトに対してだけ発生します。たとえば、セマフォの数が 1 つ減らされます。
バージョン情報
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


ThreadPool.RegisterWaitForSingleObject メソッド

名前 | 説明 |
---|---|
ThreadPool.RegisterWaitForSingleObject (WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) | ミリ秒単位のタイムアウトとして 32 ビット符号付き整数を指定して、WaitHandle を待機するデリゲートを登録します。 |
ThreadPool.RegisterWaitForSingleObject (WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) | ミリ秒単位のタイムアウトとして 64 ビット符号付き整数を指定して、WaitHandle を待機するデリゲートを登録します。 |
ThreadPool.RegisterWaitForSingleObject (WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) | タイムアウトとして TimeSpan 値を指定して、WaitHandle を待機するデリゲートを登録します。 |
ThreadPool.RegisterWaitForSingleObject (WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) | ミリ秒単位のタイムアウトとして 32 ビット符号なし整数を指定して、WaitHandle を待機するデリゲートを登録します。 |

ThreadPool.RegisterWaitForSingleObject メソッド (WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)
アセンブリ: mscorlib (mscorlib.dll 内)

Public Shared Function RegisterWaitForSingleObject ( _ waitObject As WaitHandle, _ callBack As WaitOrTimerCallback, _ state As Object, _ millisecondsTimeOutInterval As Integer, _ executeOnlyOnce As Boolean _ ) As RegisteredWaitHandle
Dim waitObject As WaitHandle Dim callBack As WaitOrTimerCallback Dim state As Object Dim millisecondsTimeOutInterval As Integer Dim executeOnlyOnce As Boolean Dim returnValue As RegisteredWaitHandle returnValue = ThreadPool.RegisterWaitForSingleObject(waitObject, callBack, state, millisecondsTimeOutInterval, executeOnlyOnce)
public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, int millisecondsTimeOutInterval, bool executeOnlyOnce )
public: static RegisteredWaitHandle^ RegisterWaitForSingleObject ( WaitHandle^ waitObject, WaitOrTimerCallback^ callBack, Object^ state, int millisecondsTimeOutInterval, bool executeOnlyOnce )
public static RegisteredWaitHandle RegisterWaitForSingleObject ( WaitHandle waitObject, WaitOrTimerCallback callBack, Object state, int millisecondsTimeOutInterval, boolean executeOnlyOnce )
public static function RegisterWaitForSingleObject ( waitObject : WaitHandle, callBack : WaitOrTimerCallback, state : Object, millisecondsTimeOutInterval : int, executeOnlyOnce : boolean ) : RegisteredWaitHandle
- waitObject
登録する WaitHandle。
- millisecondsTimeOutInterval
ミリ秒単位のタイムアウト。millisecondsTimeOutInterval パラメータが 0 の場合、関数はオブジェクトの状態をテストして、すぐに返します。millisecondsTimeOutInterval が -1 の場合、関数のタイムアウト間隔が経過することはありません。
- executeOnlyOnce
デリゲートの呼び出し後、スレッドが waitObject パラメータを待機しなくなる場合は true。待機が登録解除されるまでは、待機操作が完了するたびにタイマをリセットする場合は false。
ネイティブ ハンドルをカプセル化する RegisteredWaitHandle。


RegisterWaitForSingleObject メソッドは、指定したデリゲートをスレッド プールのキューに置きます。次のいずれかが発生すると、ワーカー スレッドはデリゲートを実行します。
RegisterWaitForSingleObject メソッドは、指定したオブジェクトの WaitHandle の現在の状態をチェックします。オブジェクトの状態が非シグナル状態である場合、このメソッドは待機操作を登録します。待機操作は、スレッド プールのスレッドによって実行されます。オブジェクトの状態がシグナル状態になると、またはタイムアウト間隔が経過すると、デリゲートがワーカー スレッドによって実行されます。timeOutInterval パラメータが 0 以外で、executeOnlyOnce パラメータが false である場合は、イベントがシグナル状態になるたびに、またはタイムアウト間隔が経過するたびにタイマがリセットされます。
待機操作をキャンセルするには、RegisteredWaitHandle.Unregister メソッドを呼び出します。
待機スレッドは、Win32 の WaitForMultipleObjects 関数を使用して、登録された待機操作を監視します。このため、RegisterWaitForSingleObject を複数回呼び出すときに同じネイティブ オペレーティング システム ハンドルを使用する必要がある場合は、Win32 DuplicateHandle 関数を使用してハンドルを複製する必要があります。RegisterWaitForSingleObject に渡されたイベント オブジェクトにパルスを送ることはできません。これは、待機スレッドはリセットされるまでイベントがシグナル状態であることを検出できないためです。
この関数は、戻る前に、同期オブジェクトのいくつかの型の状態を変更します。変更は、シグナル状態によって待機条件が満たされたオブジェクトに対してだけ発生します。たとえば、セマフォの数が 1 つ減らされます。
バージョン情報
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- ThreadPool.RegisterWaitForSingleObject メソッドのページへのリンク