ThreadPool.UnsafeRegisterWaitForSingleObject 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
注册委托以等待 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 方法而不是根据已注册的等待句柄的终结器,垃圾回收可以更高效地工作。