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

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

 

Publicado: octubre de 2016

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 Shared Function RegisterWaitForSingleObject (
	waitObject As WaitHandle,
	callBack As WaitOrTimerCallback,
	state As Object,
	timeout As TimeSpan,
	executeOnlyOnce As Boolean
) As RegisteredWaitHandle

Parámetros

waitObject
Type: System.Threading.WaitHandle

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

callBack
Type: System.Threading.WaitOrTimerCallback

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

state
Type: System.Object

Objeto que se ha pasado al delegado.

timeout
Type: System.TimeSpan

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
Type: System.Boolean

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

El timeout parámetro es menor que -1.

NotSupportedException

El timeout parámetro es mayor que Int32.MaxValue.

Cuando haya terminado con el RegisteredWaitHandle que devuelve este método, llame a su RegisteredWaitHandle.Unregister método para liberar las referencias al identificador de espera. Se recomienda que siempre llame a la RegisteredWaitHandle.Unregister (método), incluso si especifica true para executeOnlyOnce. Colección de elementos no utilizados resulta más eficaz si se llama a la RegisteredWaitHandle.Unregister método en lugar de según el finalizador del controlador de espera registrada.

El RegisterWaitForSingleObject método pone en cola el delegado especificado en el grupo de subprocesos. Un subproceso de trabajo ejecutará al delegado cuando se produce uno de los siguientes:

  • El objeto especificado está en el estado señalado.

  • Se agota el tiempo de espera.

El RegisterWaitForSingleObject método comprueba el estado actual del objeto especificado WaitHandle. Si el estado del objeto no está señalado, el método registra una operación de espera. Un subproceso del grupo de subprocesos realiza la operación de espera. Un subproceso de trabajo ejecuta el delegado cuando el estado del objeto pasa a ser señalado o transcurre el intervalo de tiempo de espera. Si el timeOutInterval parámetro no es 0 (cero) y la executeOnlyOnce parámetro es false, el temporizador se restablece cada vez que el evento está señalado o transcurre el intervalo de tiempo de espera.

System_CAPS_importantImportante

Mediante un Mutex para waitObject no proporciona la exclusión mutua de devoluciones de llamada porque la API de Win32 subyacente utiliza el valor predeterminado WT_EXECUTEDEFAULT marca, por lo que cada devolución de llamada se envía en un subproceso independiente del grupo. En lugar de un Mutex, use un Semaphore con un recuento máximo de 1.

Para cancelar la operación de espera, llame a la RegisteredWaitHandle.Unregister (método).

El subproceso de espera utiliza Win32 WaitForMultipleObjects función para supervisar las operaciones de espera registrada. Por lo tanto, si debe utilizar el mismo identificador de sistema operativo nativo en varias llamadas a RegisterWaitForSingleObject, debe duplicar el identificador utilizando Win32 DuplicateHandle (función). Tenga en cuenta que no debe marcar un objeto de evento pasado a RegisterWaitForSingleObject, porque el subproceso de espera podría no detectar que el evento está señalado antes de restablecerse.

La función modifica el estado de algunos tipos de objetos de sincronización antes de devolverse. Modificación se produce sólo para el objeto cuyo estado señalado debe cumplirse la condición de espera. Por ejemplo, el recuento de un semáforo disminuye en uno.

A partir de .NET Framework versión 2.0, la Thread.CurrentPrincipal valor de propiedad se propaga a los subprocesos de trabajo en una cola mediante el RegisterWaitForSingleObject método. En versiones anteriores, no se propaga la información de entidad de seguridad.

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