信息
您所需的主题如下所示。但此主题未包含在此库中。

WaitHandle.WaitAny 方法 (WaitHandle[], Int32)

2013/12/13

等待指定数组中的任意元素接收信号,同时使用 32 位有符号整数指定时间间隔。

Namespace:  System.Threading
程序集:  mscorlib(位于 mscorlib.dll 中)

public static int WaitAny(
	WaitHandle[] waitHandles,
	int millisecondsTimeout
)

参数

waitHandles
类型: System.Threading.WaitHandle []
一个数组,包含当前实例将等待的对象。
millisecondsTimeout
类型: System.Int32
等待的毫秒数,或为 Timeout.Infinite (-1),表示无限期等待。

返回值

类型: System.Int32
满足等待的对象的数组索引;如果没有任何对象满足等待,并且等效于 millisecondsTimeout 的时间间隔已过,则为 WaitTimeout

异常条件
ArgumentNullException

waitHandles 参数为 null

- 或 -

waitHandles 数组中的一个或多个对象为 null

NotSupportedException

waitHandles 中对象的数目大于系统允许的数目。

ArgumentOutOfRangeException

millisecondsTimeout 是一个非 -1 的负数,而 -1 表示无限期超时。

ArgumentException

waitHandles 是不含任何元素的数组。

如果 millisecondsTimeout 为零,则该方法不会进入阻止状态。该方法会测试等待句柄的状态并立即返回。

当等待终止时(任何句柄都收到信号或发生超时),此方法返回。如果在调用期间有多个对象变为终止,则返回值为所有终止对象中具有最小索引值的终止对象的数组索引。在某些实现中,如果传递的句柄超过 64 个,将引发 NotSupportedException

下面的示例演示如何使用 WaitAny 方法的这个重载,在等待多个线程完成时报告进度。每次 WaitAny 方法超时时,等待的线程都向用户界面线程报告进度。

此代码摘自为 WaitHandle 类提供的一个更大的示例。


// Wait for ANY subtask to complete, and show progress.

// Create an array of ManualResetEvent wait handles. Each subtask will
// signal its ManualResetEvent when it is finished.
WaitHandle[] waitHandles = finished.ToArray();
int index = WaitHandle.WaitTimeout;

while (index == WaitHandle.WaitTimeout)
{
   // Wait for any WaitHandle to be signaled. Use a timeout of 250 milliseconds 
   // to send progress reports. If a timeout occurs, WaitTimeout is returned;
   // if a WaitHandle signals, the array index of the WaitHandle is returned.
   //
   index = WaitHandle.WaitAny(waitHandles, 250);
   worker.ReportProgress(1);
}


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: