Compartir vía


ThreadPool.UnsafeRegisterWaitForSingleObject Método

Definición

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.

Consulte también

Se aplica a