RegisterWaitForSingleObject Método (WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)
Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

ThreadPool.RegisterWaitForSingleObject (Método) (WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

 

Registra un delegado para que espere a la clase WaitHandle y especifica un valor TimeSpan como tiempo de espera.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

public static RegisteredWaitHandle RegisterWaitForSingleObject(
	WaitHandle waitObject,
	WaitOrTimerCallback callBack,
	object state,
	TimeSpan timeout,
	bool executeOnlyOnce
)

Parámetros

waitObject

La clase WaitHandle que se va a registrar.Use un WaitHandle diferente de Mutex.

callBack

Delegado de WaitOrTimerCallback al que se llamará cuando el parámetro waitObject esté marcado.

state

Objeto que se ha pasado al delegado.

timeout

Tiempo de espera representado por TimeSpan.Si timeout es 0 (cero), la función comprueba el estado del objeto y regresa inmediatamente. Si timeout es -1, el intervalo de tiempo de espera de la función nunca transcurre.

executeOnlyOnce

Es true para indicar que el subproceso no esperará en el parámetro waitObject después de haber llamado al delegado; es false para indicar que el temporizador se restablecerá cada vez que se complete la operación de espera, hasta que se anule el registro de la espera.

Valor devuelto

Type: System.Threading.RegisteredWaitHandle

RegisteredWaitHandle que encapsula el identificador nativo.

Exception Condition
ArgumentOutOfRangeException

The timeout parameter is less than -1.

NotSupportedException

The timeout parameter is greater than Int32.MaxValue.

When you are finished using the RegisteredWaitHandle that is returned by this method, call its RegisteredWaitHandle.Unregister method to release references to the wait handle.We recommend that you always call the RegisteredWaitHandle.Unregister method, even if you specify true for executeOnlyOnce.Garbage collection works more efficiently if you call the RegisteredWaitHandle.Unregister method instead of depending on the registered wait handle's finalizer.

The RegisterWaitForSingleObject method queues the specified delegate to the thread pool.A worker thread will execute the delegate when one of the following occurs:

  • The specified object is in the signaled state.

  • The time-out interval elapses.

The RegisterWaitForSingleObject method checks the current state of the specified object's WaitHandle.If the object's state is unsignaled, the method registers a wait operation.The wait operation is performed by a thread from the thread pool.The delegate is executed by a worker thread when the object's state becomes signaled or the time-out interval elapses.If the timeOutInterval parameter is not 0 (zero) and the executeOnlyOnce parameter is false, the timer is reset every time the event is signaled or the time-out interval elapses.

System_CAPS_importantImportante

Using a Mutex for waitObject does not provide mutual exclusion for the callbacks because the underlying Win32 API uses the default WT_EXECUTEDEFAULT flag, so each callback is dispatched on a separate thread pool thread.Instead of a Mutex, use a Semaphore with a maximum count of 1.

To cancel the wait operation, call the RegisteredWaitHandle.Unregister method.

The wait thread uses the Win32 WaitForMultipleObjects function to monitor registered wait operations.Therefore, if you must use the same native operating system handle in multiple calls to RegisterWaitForSingleObject, you must duplicate the handle using the Win32 DuplicateHandle function.Note that you should not pulse an event object passed to RegisterWaitForSingleObject, because the wait thread might not detect that the event is signaled before it is reset.

Before returning, the function modifies the state of some types of synchronization objects.Modification occurs only for the object whose signaled state caused the wait condition to be satisfied.For example, the count of a semaphore is decreased by one.

Starting with the .NET Framework version 2.0, the Thread.CurrentPrincipal property value is propagated to worker threads queued using the RegisterWaitForSingleObject method.In earlier versions, the principal information is not propagated.

.NET Framework
Disponible desde 1.1
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar:
© 2016 Microsoft