ThreadPool.UnsafeRegisterWaitForSingleObject 方法

定义

注册委托以等待 WaitHandle,但不会将调用堆栈传播到辅助线程。

重载

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

注册一个等待 WaitHandle 的委托,并指定一个 TimeSpan 值来表示超时时间。此方法不将调用堆栈传播到辅助线程。

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

注册一个等待 WaitHandle 的委托,并使用一个 32 位带符号整数来表示超时时间(以毫秒为单位)。 此方法不将调用堆栈传播到辅助线程。

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

注册一个等待 WaitHandle 的委托,并指定一个 64 位有符号整数来表示超时值(以毫秒为单位)。 此方法不将调用堆栈传播到辅助线程。

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

指定表示超时(以毫秒为单位)的 32 位无符号整数,注册一个委托等待 WaitHandle。 此方法不将调用堆栈传播到辅助线程。

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

Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs

注册一个等待 WaitHandle 的委托,并指定一个 TimeSpan 值来表示超时时间。此方法不将调用堆栈传播到辅助线程。

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

参数

waitObject
WaitHandle

要注册的 WaitHandle。 使用 WaitHandle 而非 Mutex

callBack
WaitOrTimerCallback

waitObject 参数发出信号时调用的委托。

state
Object

传递给委托的对象。

timeout
TimeSpan

TimeSpan 表示的超时时间。 如果 timeout 为 0(零),则函数将测试对象的状态并立即返回。 如果 timeout 为 -1,则函数的超时间隔永远不过期。

executeOnlyOnce
Boolean

如果为 true,表示在调用了委托后,线程将不再在 waitObject 参数上等待;如果为 false,表示每次完成等待操作后都重置计时器,直到注销等待。

返回

RegisteredWaitHandle 对象,可用于取消已注册的等待操作。

属性

例外

timeout 参数小于 -1。

参数 timeout 大于 Int32.MaxValue

调用方没有所要求的权限。

注解

RegisterWaitForSingleObject与 方法不同, UnsafeRegisterWaitForSingleObject 不会将调用堆栈传播到工作线程。 这允许代码丢失调用堆栈,从而提升其安全特权。

注意

使用 UnsafeRegisterWaitForSingleObject 可能会无意中打开一个安全漏洞。 代码访问安全性基于堆栈上所有调用方的权限进行权限检查。 使用 UnsafeRegisterWaitForSingleObject在线程池线程上对工作进行排队时,线程池线程的堆栈将不具有实际调用方的上下文。 恶意代码可能会利用此漏洞来避免权限检查。

Mutex将 用于 waitObject 不会为回调提供相互排斥,因为基础 Windows API 使用默认WT_EXECUTEDEFAULT标志,因此每个回调在单独的线程池线程上调度。

使用 RegisteredWaitHandle 完此方法返回的 后,调用其 RegisteredWaitHandle.Unregister 方法来释放对等待句柄的引用。 建议始终调用 RegisteredWaitHandle.Unregister 方法,即使为 executeOnlyOnce指定true也是如此。 如果调用 RegisteredWaitHandle.Unregister 方法而不是依赖于已注册的等待句柄的终结器,垃圾回收会更高效。

另请参阅

适用于

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

Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs

注册一个等待 WaitHandle 的委托,并使用一个 32 位带符号整数来表示超时时间(以毫秒为单位)。 此方法不将调用堆栈传播到辅助线程。

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

参数

waitObject
WaitHandle

要注册的 WaitHandle。 使用 WaitHandle 而非 Mutex

callBack
WaitOrTimerCallback

waitObject 参数发出信号时调用的委托。

state
Object

传递给委托的对象。

millisecondsTimeOutInterval
Int32

以毫秒为单位的超时。 如果 millisecondsTimeOutInterval 参数为 0(零),函数将测试对象的状态并立即返回。 如果 millisecondsTimeOutInterval 为 -1,则函数的超时间隔永远不过期。

executeOnlyOnce
Boolean

如果为 true,表示在调用了委托后,线程将不再在 waitObject 参数上等待;如果为 false,表示每次完成等待操作后都重置计时器,直到注销等待。

返回

RegisteredWaitHandle 对象,可用于取消已注册的等待操作。

属性

例外

millisecondsTimeOutInterval 参数小于 -1。

调用方没有所要求的权限。

注解

RegisterWaitForSingleObject与 方法不同, UnsafeRegisterWaitForSingleObject 不会将调用堆栈传播到工作线程。 这允许代码丢失调用堆栈,从而提升其安全特权。

注意

使用 UnsafeRegisterWaitForSingleObject 可能会无意中打开一个安全漏洞。 代码访问安全性基于堆栈上所有调用方的权限进行权限检查。 使用 UnsafeRegisterWaitForSingleObject在线程池线程上对工作进行排队时,线程池线程的堆栈将不具有实际调用方的上下文。 恶意代码可能会利用此漏洞来避免权限检查。

Mutex将 用于 waitObject 不会为回调提供相互排斥,因为基础 Windows API 使用默认WT_EXECUTEDEFAULT标志,因此每个回调在单独的线程池线程上调度。

使用 RegisteredWaitHandle 完此方法返回的 后,调用其 RegisteredWaitHandle.Unregister 方法来释放对等待句柄的引用。 建议始终调用 RegisteredWaitHandle.Unregister 方法,即使为 executeOnlyOnce指定true也是如此。 如果调用 RegisteredWaitHandle.Unregister 方法而不是依赖于已注册的等待句柄的终结器,垃圾回收会更高效。

另请参阅

适用于

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

Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs

注册一个等待 WaitHandle 的委托,并指定一个 64 位有符号整数来表示超时值(以毫秒为单位)。 此方法不将调用堆栈传播到辅助线程。

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

参数

waitObject
WaitHandle

要注册的 WaitHandle。 使用 WaitHandle 而非 Mutex

callBack
WaitOrTimerCallback

waitObject 参数发出信号时调用的委托。

state
Object

传递给委托的对象。

millisecondsTimeOutInterval
Int64

以毫秒为单位的超时。 如果 millisecondsTimeOutInterval 参数为 0(零),函数将测试对象的状态并立即返回。 如果 millisecondsTimeOutInterval 为 -1,则函数的超时间隔永远不过期。

executeOnlyOnce
Boolean

如果为 true,表示在调用了委托后,线程将不再在 waitObject 参数上等待;如果为 false,表示每次完成等待操作后都重置计时器,直到注销等待。

返回

RegisteredWaitHandle 对象,可用于取消已注册的等待操作。

属性

例外

millisecondsTimeOutInterval 参数小于 -1。

调用方没有所要求的权限。

注解

RegisterWaitForSingleObject与 方法不同, UnsafeRegisterWaitForSingleObject 不会将调用堆栈传播到工作线程。 这允许代码丢失调用堆栈,从而提升其安全特权。

注意

使用 UnsafeRegisterWaitForSingleObject 可能会无意中打开一个安全漏洞。 代码访问安全性基于堆栈上所有调用方的权限进行权限检查。 使用 UnsafeRegisterWaitForSingleObject在线程池线程上对工作进行排队时,线程池线程的堆栈将不具有实际调用方的上下文。 恶意代码可能会利用此漏洞来避免权限检查。

Mutex将 用于 waitObject 不会为回调提供相互排斥,因为基础 Windows API 使用默认WT_EXECUTEDEFAULT标志,因此每个回调在单独的线程池线程上调度。

使用 RegisteredWaitHandle 完此方法返回的 后,调用其 RegisteredWaitHandle.Unregister 方法来释放对等待句柄的引用。 建议始终调用 RegisteredWaitHandle.Unregister 方法,即使为 executeOnlyOnce指定true也是如此。 如果调用 RegisteredWaitHandle.Unregister 方法而不是依赖于已注册的等待句柄的终结器,垃圾回收会更高效。

另请参阅

适用于

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

Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs
Source:
ThreadPoolWorkQueue.cs

重要

此 API 不符合 CLS。

指定表示超时(以毫秒为单位)的 32 位无符号整数,注册一个委托等待 WaitHandle。 此方法不将调用堆栈传播到辅助线程。

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

参数

waitObject
WaitHandle

要注册的 WaitHandle。 使用 WaitHandle 而非 Mutex

callBack
WaitOrTimerCallback

waitObject 参数发出信号时调用的委托。

state
Object

传递给委托的对象。

millisecondsTimeOutInterval
UInt32

以毫秒为单位的超时。 如果 millisecondsTimeOutInterval 参数为 0(零),函数将测试对象的状态并立即返回。 如果 millisecondsTimeOutInterval 为 -1,则函数的超时间隔永远不过期。

executeOnlyOnce
Boolean

如果为 true,表示在调用了委托后,线程将不再在 waitObject 参数上等待;如果为 false,表示每次完成等待操作后都重置计时器,直到注销等待。

返回

RegisteredWaitHandle 对象,可用于取消已注册的等待操作。

属性

例外

调用方没有所要求的权限。

注解

RegisterWaitForSingleObject与 方法不同, UnsafeRegisterWaitForSingleObject 不会将调用堆栈传播到工作线程。 这允许代码丢失调用堆栈,从而提升其安全特权。

注意

使用 UnsafeRegisterWaitForSingleObject 可能会无意中打开安全漏洞。 代码访问安全性基于堆栈上所有调用方的权限进行权限检查。 使用 UnsafeRegisterWaitForSingleObject在线程池线程上排入队列时,线程池线程的堆栈将没有实际调用方的上下文。 恶意代码可能会利用此漏洞来避免权限检查。

Mutex使用 for waitObject 不会为回调提供相互排除,因为基础 Windows API 使用默认WT_EXECUTEDEFAULT标志,因此每个回调在单独的线程池线程上调度。

使用 RegisteredWaitHandle 完此方法返回的 时,调用其 RegisteredWaitHandle.Unregister 方法来释放对等待句柄的引用。 建议始终调用 RegisteredWaitHandle.Unregister 方法,即使为 executeOnlyOnce指定 true 。 如果调用 RegisteredWaitHandle.Unregister 方法而不是根据已注册的等待句柄的终结器,垃圾回收可以更高效地工作。

另请参阅

适用于