Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ThreadPool.UnsafeRegisterWaitForSingleObject (Método) (WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

Registra un delegado que va a esperar a una clase WaitHandle, especificando un entero de 64 bits con signo para representar el tiempo de espera en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.

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

public static RegisteredWaitHandle UnsafeRegisterWaitForSingleObject(
	WaitHandle waitObject,
	WaitOrTimerCallback callBack,
	Object state,
	long millisecondsTimeOutInterval,
	bool executeOnlyOnce
)

Parámetros

waitObject
Tipo: System.Threading.WaitHandle
WaitHandle que se va a registrar. Utilice un WaitHandle diferente de Mutex.
callBack
Tipo: System.Threading.WaitOrTimerCallback
Delegado al que se va a llamar cuando el parámetro waitObject esté señalado.
state
Tipo: System.Object
Objeto que se pasa al delegado.
millisecondsTimeOutInterval
Tipo: System.Int64
Tiempo de espera en milisegundos. Si el valor del parámetro millisecondsTimeOutInterval es 0 (cero), la función comprueba el estado del objeto y regresa inmediatamente. Si millisecondsTimeOutInterval es -1, el intervalo de tiempo de espera de la función nunca transcurre.
executeOnlyOnce
Tipo: System.Boolean
Es true para indicar que el subproceso ya no va a esperar en el parámetro waitObject después de haber llamado al delegado; es false para indicar que el temporizador se restablece cada vez que se completa la operación de espera, hasta que se anule el registro de espera.

Valor devuelto

Tipo: System.Threading.RegisteredWaitHandle
Objeto RegisteredWaitHandle que puede utilizarse para cancelar la operación de espera registrada.

ExcepciónCondición
ArgumentOutOfRangeException

El parámetro millisecondsTimeOutInterval es menor que -1.

SecurityException

El llamador no dispone del permiso requerido.

A diferencia del método RegisterWaitForSingleObject, UnsafeRegisterWaitForSingleObject no propaga la pila de llamadas al subproceso de trabajo. De esta forma, se permite que el código pierda la pila de llamadas e incremente así sus privilegios de seguridad.

Nota de precauciónPrecaución

La utilización de UnsafeRegisterWaitForSingleObject podría crear una vulnerabilidad de seguridad involuntariamente. La seguridad de acceso del código basa las comprobaciones de permisos en los permisos de todos los llamadores de la pila. Si se coloca trabajo en cola en un subproceso de grupo de subprocesos mediante UnsafeRegisterWaitForSingleObject, la pila del subproceso de grupo de subprocesos no tendrá el contexto de los llamadores reales. Un código malintencionado podría aprovechar esta circunstancia para evitar las comprobaciones de permisos.

El uso de Mutex para waitObject no proporciona la exclusión mutua de devoluciones de llamada porque la API de Win32 subyacente utiliza el marcador WT_EXECUTEDEFAULT predeterminado, por lo que cada devolución de llamada se envía en un subproceso del grupo de subprocesos independiente.

Cuando termine de usar la clase RegisteredWaitHandle devuelta por este método, llame a su método RegisteredWaitHandle.Unregister para liberar las referencias al identificador de espera. Se recomienda llamar siempre al método RegisteredWaitHandle.Unregister, incluso si se especifica true para executeOnlyOnce. La recolección de elementos no utilizados resulta más eficaz si se llama al método RegisteredWaitHandle.Unregister en lugar de depender del finalizador del identificador de espera registrado.

.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

  • SecurityCriticalAttribute 

    Requiere plena confianza para el llamador inmediato. Un código de confianza parcial o transparente no puede utilizar este miembro.

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft