ThreadPool.UnsafeRegisterWaitForSingleObject Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Registra un delegado para que espere a WaitHandle, pero no propaga la pila de llamadas al subproceso de trabajo.
Sobrecargas
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean) |
Registra un delegado para que espere a la clase WaitHandle y especifica un valor TimeSpan como tiempo de espera. Este método no propaga la pila de llamadas al subproceso de trabajo. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean) |
Registra un delegado para que espere a la clase WaitHandle y usa un entero de 32 bits con signo como tiempo de espera, en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean) |
Registra un delegado para que espere a la clase WaitHandle y especifica un entero de 64 bits con signo como tiempo de espera, en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean) |
Registra un delegado para que espere a la clase WaitHandle y especifica un entero de 32 bits sin signo como tiempo de espera, en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo. |
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
Registra un delegado para que espere a la clase WaitHandle y especifica un valor TimeSpan como tiempo de espera. Este método no propaga la pila de llamadas al subproceso de trabajo.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, TimeSpan timeout, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, TimeSpan timeout, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, TimeSpan timeout, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, timeout As TimeSpan, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parámetros
- waitObject
- WaitHandle
La clase WaitHandle que se va a registrar. Use un WaitHandle diferente de Mutex.
- callBack
- WaitOrTimerCallback
Delegado al que se llamará cuando el parámetro waitObject
esté marcado.
- state
- Object
Objeto que se pasa al delegado.
- timeout
- 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
- 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.
Devoluciones
Objeto RegisteredWaitHandle que puede usarse para cancelar la operación de espera registrada.
- Atributos
Excepciones
El parámetro timeout
es menor que -1.
El timeout
parámetro es mayor que Int32.MaxValue.
El llamador no dispone del permiso requerido.
Comentarios
A diferencia del RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject no propaga la pila de llamadas al subproceso de trabajo. Esto permite que el código pierda la pila de llamadas y, por tanto, elevar sus privilegios de seguridad.
Precaución
Usar UnsafeRegisterWaitForSingleObject podría abrir accidentalmente un agujero de seguridad. La seguridad de acceso al código basa sus comprobaciones de permisos en los permisos de todos los llamadores de la pila. Cuando el trabajo se pone en cola en un subproceso de grupo de subprocesos mediante UnsafeRegisterWaitForSingleObject, la pila del subproceso del grupo de subprocesos no tendrá el contexto de los autores de llamadas reales. Es posible que el código malintencionado pueda aprovechar esto para evitar comprobaciones de permisos.
Mutex El uso de para waitObject
no proporciona exclusión mutua para las devoluciones de llamada porque la API de Windows subyacente usa la marca predeterminadaWT_EXECUTEDEFAULT
, por lo que cada devolución de llamada se envía en un subproceso de grupo de subprocesos independiente.
Cuando haya terminado de usar el RegisteredWaitHandle que devuelve este método, llame a su RegisteredWaitHandle.Unregister método para liberar referencias al identificador de espera. Se recomienda llamar siempre al RegisteredWaitHandle.Unregister método , incluso si especifica true
para executeOnlyOnce
. La recolección de elementos no utilizados funciona de forma más eficaz si llama al RegisteredWaitHandle.Unregister método en lugar de según el finalizador del identificador de espera registrado.
Consulte también
Se aplica a
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
Registra un delegado para que espere a la clase WaitHandle y usa un entero de 32 bits con signo como tiempo de espera, en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Integer, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parámetros
- waitObject
- WaitHandle
La clase WaitHandle que se va a registrar. Use un WaitHandle diferente de Mutex.
- callBack
- WaitOrTimerCallback
Delegado al que se llamará cuando el parámetro waitObject
esté marcado.
- state
- Object
Objeto que se pasa al delegado.
- millisecondsTimeOutInterval
- Int32
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
- 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.
Devoluciones
Objeto RegisteredWaitHandle que puede usarse para cancelar la operación de espera registrada.
- Atributos
Excepciones
El parámetro millisecondsTimeOutInterval
es menor que -1.
El llamador no dispone del permiso requerido.
Comentarios
A diferencia del RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject no propaga la pila de llamadas al subproceso de trabajo. Esto permite que el código pierda la pila de llamadas y, por tanto, elevar sus privilegios de seguridad.
Precaución
Usar UnsafeRegisterWaitForSingleObject podría abrir accidentalmente un agujero de seguridad. La seguridad de acceso al código basa sus comprobaciones de permisos en los permisos de todos los llamadores de la pila. Cuando el trabajo se pone en cola en un subproceso de grupo de subprocesos mediante UnsafeRegisterWaitForSingleObject, la pila del subproceso del grupo de subprocesos no tendrá el contexto de los autores de llamadas reales. Es posible que el código malintencionado pueda aprovechar esto para evitar comprobaciones de permisos.
Mutex El uso de para waitObject
no proporciona exclusión mutua para las devoluciones de llamada porque la API de Windows subyacente usa la marca predeterminadaWT_EXECUTEDEFAULT
, por lo que cada devolución de llamada se envía en un subproceso de grupo de subprocesos independiente.
Cuando haya terminado de usar el RegisteredWaitHandle que devuelve este método, llame a su RegisteredWaitHandle.Unregister método para liberar referencias al identificador de espera. Se recomienda llamar siempre al RegisteredWaitHandle.Unregister método , incluso si especifica true
para executeOnlyOnce
. La recolección de elementos no utilizados funciona de forma más eficaz si llama al RegisteredWaitHandle.Unregister método en lugar de según el finalizador del identificador de espera registrado.
Consulte también
Se aplica a
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
Registra un delegado para que espere a la clase WaitHandle y especifica un entero de 64 bits con signo como tiempo de espera, en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Long, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parámetros
- waitObject
- WaitHandle
La clase WaitHandle que se va a registrar. Use un WaitHandle diferente de Mutex.
- callBack
- WaitOrTimerCallback
Delegado al que se llamará cuando el parámetro waitObject
esté marcado.
- state
- Object
Objeto que se pasa al delegado.
- millisecondsTimeOutInterval
- 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
- 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.
Devoluciones
Objeto RegisteredWaitHandle que puede usarse para cancelar la operación de espera registrada.
- Atributos
Excepciones
El parámetro millisecondsTimeOutInterval
es menor que -1.
El llamador no dispone del permiso requerido.
Comentarios
A diferencia del RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject no propaga la pila de llamadas al subproceso de trabajo. Esto permite que el código pierda la pila de llamadas y, por tanto, elevar sus privilegios de seguridad.
Precaución
Usar UnsafeRegisterWaitForSingleObject podría abrir accidentalmente un agujero de seguridad. La seguridad de acceso al código basa sus comprobaciones de permisos en los permisos de todos los llamadores de la pila. Cuando el trabajo se pone en cola en un subproceso de grupo de subprocesos mediante UnsafeRegisterWaitForSingleObject, la pila del subproceso del grupo de subprocesos no tendrá el contexto de los autores de llamadas reales. Es posible que el código malintencionado pueda aprovechar esto para evitar comprobaciones de permisos.
Mutex El uso de para waitObject
no proporciona exclusión mutua para las devoluciones de llamada porque la API de Windows subyacente usa la marca predeterminadaWT_EXECUTEDEFAULT
, por lo que cada devolución de llamada se envía en un subproceso de grupo de subprocesos independiente.
Cuando haya terminado de usar el RegisteredWaitHandle que devuelve este método, llame a su RegisteredWaitHandle.Unregister método para liberar referencias al identificador de espera. Se recomienda llamar siempre al RegisteredWaitHandle.Unregister método , incluso si especifica true
para executeOnlyOnce
. La recolección de elementos no utilizados funciona de forma más eficaz si llama al RegisteredWaitHandle.Unregister método en lugar de según el finalizador del identificador de espera registrado.
Consulte también
Se aplica a
UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
- Source:
- ThreadPoolWorkQueue.cs
Importante
Esta API no es conforme a CLS.
Registra un delegado para que espere a la clase WaitHandle y especifica un entero de 32 bits sin signo como tiempo de espera, en milisegundos. Este método no propaga la pila de llamadas al subproceso de trabajo.
public:
static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, System::UInt32 millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.CLSCompliant(false)>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
[<System.CLSCompliant(false)>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As UInteger, executeOnlyOnce As Boolean) As RegisteredWaitHandle
Parámetros
- waitObject
- WaitHandle
La clase WaitHandle que se va a registrar. Use un WaitHandle diferente de Mutex.
- callBack
- WaitOrTimerCallback
Delegado al que se llamará cuando el parámetro waitObject
esté marcado.
- state
- Object
Objeto que se pasa al delegado.
- millisecondsTimeOutInterval
- UInt32
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
- 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.
Devoluciones
Objeto RegisteredWaitHandle que puede usarse para cancelar la operación de espera registrada.
- Atributos
Excepciones
El llamador no dispone del permiso requerido.
Comentarios
A diferencia del RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject no propaga la pila de llamadas al subproceso de trabajo. Esto permite que el código pierda la pila de llamadas y, por tanto, elevar sus privilegios de seguridad.
Precaución
El uso UnsafeRegisterWaitForSingleObject podría abrir accidentalmente un agujero de seguridad. La seguridad de acceso al código basa sus comprobaciones de permisos en los permisos de todos los autores de llamadas de la pila. Cuando el trabajo se pone en cola en un subproceso del grupo de subprocesos mediante UnsafeRegisterWaitForSingleObject, la pila del subproceso del grupo de subprocesos no tendrá el contexto de los llamadores reales. Es posible que el código malintencionado pueda aprovechar esto para evitar comprobaciones de permisos.
Mutex El uso de para waitObject
no proporciona exclusión mutua para las devoluciones de llamada porque la API de Windows subyacente usa la marca predeterminadaWT_EXECUTEDEFAULT
, por lo que cada devolución de llamada se envía en un subproceso de grupo de subprocesos independiente.
Cuando haya terminado de usar el RegisteredWaitHandle que devuelve este método, llame a su RegisteredWaitHandle.Unregister método para liberar referencias al identificador de espera. Se recomienda llamar siempre al RegisteredWaitHandle.Unregister método , incluso si especifica true
para executeOnlyOnce
. La recolección de elementos no utilizados funciona de forma más eficaz si se llama al RegisteredWaitHandle.Unregister método en lugar del finalizador del controlador de espera registrado.