Partilhar via


ThreadPool.UnsafeRegisterWaitForSingleObject Método

Definição

Registra um representante para aguardar um WaitHandle, mas não propaga a pilha de chamadas para o thread de trabalho.

Sobrecargas

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

Registra um delegado para aguardar um WaitHandle, especificando um valor TimeSpan para o tempo limite. Esse método não propaga a pilha de chamadas para o thread de trabalho.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

Registra um representante para aguardar um WaitHandle, usando um inteiro com sinal de 32 bits para o tempo limite em milissegundos. Esse método não propaga a pilha de chamadas para o thread de trabalho.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

Registra um delegado para esperar um WaitHandle, especificando um inteiro com sinal de 64 bits para o tempo limite em milissegundos. Esse método não propaga a pilha de chamadas para o thread de trabalho.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

Registra um delegado para aguardar um WaitHandle, especificando um inteiro sem sinal de 32 bits para o tempo limite em milissegundos. Esse método não propaga a pilha de chamadas para o thread de trabalho.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs

Registra um delegado para aguardar um WaitHandle, especificando um valor TimeSpan para o tempo limite. Esse método não propaga a pilha de chamadas para o thread de trabalho.

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

O WaitHandle a ser registrado. Use um WaitHandle diferente do Mutex.

callBack
WaitOrTimerCallback

O delegado a ser chamado quando o parâmetro waitObject é sinalizado.

state
Object

O objeto que é passado para o delegado.

timeout
TimeSpan

O tempo limite representado por um TimeSpan. Se timeout for 0 (zero), a função testará o estado do objeto e será retornada imediatamente. Se timeout for -1, o intervalo de tempo limite da função nunca expirará.

executeOnlyOnce
Boolean

true para indicar que o thread não esperará o parâmetro waitObject depois que o delegado for chamado; false para indicar que o temporizador será reiniciado sempre que a operação de espera for concluída até que o registro da espera seja cancelado.

Retornos

O objeto RegisteredWaitHandle que pode ser usado para cancelar a operação de espera registrada.

Atributos

Exceções

O parâmetro timeout é menor que -1.

O timeout parâmetro é maior que Int32.MaxValue.

O chamador não tem a permissão necessária.

Comentários

Ao contrário do RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject não propaga a pilha de chamadas para o thread de trabalho. Isso permite que o código perca a pilha de chamadas e, assim, eleve seus privilégios de segurança.

Cuidado

Usar UnsafeRegisterWaitForSingleObject poderia inadvertidamente abrir uma falha de segurança. A segurança de acesso ao código baseia suas verificações de permissão nas permissões de todos os chamadores na pilha. Quando o trabalho é enfileirado em um thread de pool de threads usando UnsafeRegisterWaitForSingleObject, a pilha do thread do pool de threads não terá o contexto dos chamadores reais. O código mal-intencionado pode explorar isso para evitar verificações de permissão.

O uso de um Mutex para waitObject não fornece exclusão mútua para os retornos de chamada porque a API subjacente do Windows usa o sinalizador padrão WT_EXECUTEDEFAULT , portanto, cada retorno de chamada é expedido em um thread de pool de threads separado.

Quando terminar de usar o RegisteredWaitHandle retornado por esse método, chame seu RegisteredWaitHandle.Unregister método para liberar referências ao identificador de espera. Recomendamos que você sempre chame o RegisteredWaitHandle.Unregister método , mesmo que especifique true para executeOnlyOnce. A coleta de lixo funcionará com mais eficiência se você chamar o RegisteredWaitHandle.Unregister método em vez de depender do finalizador do identificador de espera registrado.

Confira também

Aplica-se a

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs

Registra um representante para aguardar um WaitHandle, usando um inteiro com sinal de 32 bits para o tempo limite em milissegundos. Esse método não propaga a pilha de chamadas para o thread de trabalho.

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

O WaitHandle a ser registrado. Use um WaitHandle diferente do Mutex.

callBack
WaitOrTimerCallback

O delegado a ser chamado quando o parâmetro waitObject é sinalizado.

state
Object

O objeto que é passado para o delegado.

millisecondsTimeOutInterval
Int32

O tempo limite em milissegundos. Se o parâmetro millisecondsTimeOutInterval for 0 (zero), a função testará o estado do objeto e será imediatamente retornada. Se millisecondsTimeOutInterval for -1, o intervalo de tempo limite da função nunca expirará.

executeOnlyOnce
Boolean

true para indicar que o thread não esperará o parâmetro waitObject depois que o delegado for chamado; false para indicar que o temporizador será reiniciado sempre que a operação de espera for concluída até que o registro da espera seja cancelado.

Retornos

O objeto RegisteredWaitHandle que pode ser usado para cancelar a operação de espera registrada.

Atributos

Exceções

O parâmetro millisecondsTimeOutInterval é menor que -1.

O chamador não tem a permissão necessária.

Comentários

Ao contrário do RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject não propaga a pilha de chamadas para o thread de trabalho. Isso permite que o código perca a pilha de chamadas e, assim, eleve seus privilégios de segurança.

Cuidado

Usar UnsafeRegisterWaitForSingleObject poderia inadvertidamente abrir uma falha de segurança. A segurança de acesso ao código baseia suas verificações de permissão nas permissões de todos os chamadores na pilha. Quando o trabalho é enfileirado em um thread de pool de threads usando UnsafeRegisterWaitForSingleObject, a pilha do thread do pool de threads não terá o contexto dos chamadores reais. O código mal-intencionado pode explorar isso para evitar verificações de permissão.

O uso de um Mutex para waitObject não fornece exclusão mútua para os retornos de chamada porque a API subjacente do Windows usa o sinalizador padrão WT_EXECUTEDEFAULT , portanto, cada retorno de chamada é expedido em um thread de pool de threads separado.

Quando terminar de usar o RegisteredWaitHandle retornado por esse método, chame seu RegisteredWaitHandle.Unregister método para liberar referências ao identificador de espera. Recomendamos que você sempre chame o RegisteredWaitHandle.Unregister método , mesmo que especifique true para executeOnlyOnce. A coleta de lixo funcionará com mais eficiência se você chamar o RegisteredWaitHandle.Unregister método em vez de depender do finalizador do identificador de espera registrado.

Confira também

Aplica-se a

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs

Registra um delegado para esperar um WaitHandle, especificando um inteiro com sinal de 64 bits para o tempo limite em milissegundos. Esse método não propaga a pilha de chamadas para o thread de trabalho.

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

O WaitHandle a ser registrado. Use um WaitHandle diferente do Mutex.

callBack
WaitOrTimerCallback

O delegado a ser chamado quando o parâmetro waitObject é sinalizado.

state
Object

O objeto que é passado para o delegado.

millisecondsTimeOutInterval
Int64

O tempo limite em milissegundos. Se o parâmetro millisecondsTimeOutInterval for 0 (zero), a função testará o estado do objeto e será imediatamente retornada. Se millisecondsTimeOutInterval for -1, o intervalo de tempo limite da função nunca expirará.

executeOnlyOnce
Boolean

true para indicar que o thread não esperará o parâmetro waitObject depois que o delegado for chamado; false para indicar que o temporizador será reiniciado sempre que a operação de espera for concluída até que o registro da espera seja cancelado.

Retornos

O objeto RegisteredWaitHandle que pode ser usado para cancelar a operação de espera registrada.

Atributos

Exceções

O parâmetro millisecondsTimeOutInterval é menor que -1.

O chamador não tem a permissão necessária.

Comentários

Ao contrário do RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject não propaga a pilha de chamadas para o thread de trabalho. Isso permite que o código perca a pilha de chamadas e, assim, eleve seus privilégios de segurança.

Cuidado

Usar UnsafeRegisterWaitForSingleObject poderia inadvertidamente abrir uma falha de segurança. A segurança de acesso ao código baseia suas verificações de permissão nas permissões de todos os chamadores na pilha. Quando o trabalho é enfileirado em um thread de pool de threads usando UnsafeRegisterWaitForSingleObject, a pilha do thread do pool de threads não terá o contexto dos chamadores reais. O código mal-intencionado pode explorar isso para evitar verificações de permissão.

O uso de um Mutex para waitObject não fornece exclusão mútua para os retornos de chamada porque a API subjacente do Windows usa o sinalizador padrão WT_EXECUTEDEFAULT , portanto, cada retorno de chamada é expedido em um thread de pool de threads separado.

Quando terminar de usar o RegisteredWaitHandle retornado por esse método, chame seu RegisteredWaitHandle.Unregister método para liberar referências ao identificador de espera. Recomendamos que você sempre chame o RegisteredWaitHandle.Unregister método , mesmo que especifique true para executeOnlyOnce. A coleta de lixo funcionará com mais eficiência se você chamar o RegisteredWaitHandle.Unregister método em vez de depender do finalizador do identificador de espera registrado.

Confira também

Aplica-se a

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs
Origem:
ThreadPoolWorkQueue.cs

Importante

Esta API não está em conformidade com CLS.

Registra um delegado para aguardar um WaitHandle, especificando um inteiro sem sinal de 32 bits para o tempo limite em milissegundos. Esse método não propaga a pilha de chamadas para o thread de trabalho.

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

O WaitHandle a ser registrado. Use um WaitHandle diferente do Mutex.

callBack
WaitOrTimerCallback

O delegado a ser chamado quando o parâmetro waitObject é sinalizado.

state
Object

O objeto que é passado para o delegado.

millisecondsTimeOutInterval
UInt32

O tempo limite em milissegundos. Se o parâmetro millisecondsTimeOutInterval for 0 (zero), a função testará o estado do objeto e será imediatamente retornada. Se millisecondsTimeOutInterval for -1, o intervalo de tempo limite da função nunca expirará.

executeOnlyOnce
Boolean

true para indicar que o thread não esperará o parâmetro waitObject depois que o delegado for chamado; false para indicar que o temporizador será reiniciado sempre que a operação de espera for concluída até que o registro da espera seja cancelado.

Retornos

O objeto RegisteredWaitHandle que pode ser usado para cancelar a operação de espera registrada.

Atributos

Exceções

O chamador não tem a permissão necessária.

Comentários

Ao contrário do RegisterWaitForSingleObject método , UnsafeRegisterWaitForSingleObject não propaga a pilha de chamadas para o thread de trabalho. Isso permite que o código perca a pilha de chamadas e, assim, eleve seus privilégios de segurança.

Cuidado

Usar UnsafeRegisterWaitForSingleObject poderia inadvertidamente abrir uma falha de segurança. A segurança de acesso ao código baseia suas verificações de permissão nas permissões de todos os chamadores na pilha. Quando o trabalho é enfileirado em um thread de pool de threads usando UnsafeRegisterWaitForSingleObject, a pilha do thread do pool de threads não terá o contexto dos chamadores reais. O código mal-intencionado pode explorar isso para evitar verificações de permissão.

O uso de um Mutex para waitObject não fornece exclusão mútua para os retornos de chamada porque a API subjacente do Windows usa o sinalizador padrão WT_EXECUTEDEFAULT , portanto, cada retorno de chamada é expedido em um thread de pool de threads separado.

Quando terminar de usar o RegisteredWaitHandle retornado por esse método, chame seu RegisteredWaitHandle.Unregister método para liberar referências ao identificador de espera. Recomendamos que você sempre chame o RegisteredWaitHandle.Unregister método , mesmo que especifique true para executeOnlyOnce. A coleta de lixo funcionará com mais eficiência se você chamar o RegisteredWaitHandle.Unregister método em vez de depender do finalizador do identificador de espera registrado.

Confira também

Aplica-se a