ThreadPool.UnsafeRegisterWaitForSingleObject Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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.