导出 (0) 打印
全部展开
此文章由人工翻译。 将光标移到文章的句子上,以查看原文。
译文
原文

WaitHandle.WaitOne 方法 (Int32)

阻止当前线程,直到当前 WaitHandle 收到信号,同时使用 32 位带符号整数指定时间间隔。

命名空间:  System.Threading
程序集:  mscorlib(在 mscorlib.dll 中)

public virtual bool WaitOne(
	int millisecondsTimeout
)

参数

millisecondsTimeout
类型:System.Int32
等待的毫秒数,或为 Timeout.Infinite (-1),表示无限期等待。

返回值

类型:System.Boolean
如果当前实例收到信号,则为 true;否则为 false

异常条件
ObjectDisposedException

当前实例已被释放。

ArgumentOutOfRangeException

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

AbandonedMutexException

线程退出时未释放互斥体,等待过程已终止。 在 Windows 98 或 Windows Millennium Edition 中不引发此异常。

InvalidOperationException

当前实例是另一个应用程序域中的 WaitHandle 的透明代理。

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

该方法的调用方在当前实例收到信号或发生超时前将被阻止。 使用此方法一直阻止到 WaitHandle 收到来自另一个线程的信号,例如异步操作完成时生成的信号。 有关更多信息,请参见 IAsyncResult 接口。

重写此方法以自定义派生类的行为。

调用此方法重载等效于调用 WaitOne(Int32, Boolean) 重载和将 exitContext 指定为 false

下面的代码示例说明在进程等待后台线程执行完时,如何使用等待句柄阻止进程终止。


using System;
using System.Threading;

class WaitOne
{
    static AutoResetEvent autoEvent = new AutoResetEvent(false);

    static void Main()
    {
        Console.WriteLine("Main starting.");

        ThreadPool.QueueUserWorkItem(
            new WaitCallback(WorkMethod), autoEvent);

        // Wait for work method to signal.
        if(autoEvent.WaitOne(1000))
        {
            Console.WriteLine("Work method signaled.");
        }
        else
        {
            Console.WriteLine("Timed out waiting for work " +
                "method to signal.");
        }
        Console.WriteLine("Main ending.");
    }

    static void WorkMethod(object stateInfo) 
    {
        Console.WriteLine("Work starting.");

        // Simulate time spent working.
        Thread.Sleep(new Random().Next(100, 2000));

        // Signal that work is finished.
        Console.WriteLine("Work ending.");
        ((AutoResetEvent)stateInfo).Set();
    }
}


.NET Framework

受以下版本支持:4、3.5 SP1、3.0 SP2、2.0 SP2

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求

社区附加资源

添加
显示:
© 2014 Microsoft