AutoResetEvent.WaitOne()方法在C#中返回值

时间:2013-01-21 16:33:41

标签: c# multithreading

我有以下代码:

class Program
    {
        static AutoResetEvent objAuto = new AutoResetEvent(false);
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(SetState));
            Console.ReadLine();
            objAuto.Set();
        }
        static void SetState(object rsevent)
        {
            Console.WriteLine("Starting....");
            bool result = objAuto.WaitOne(10000); // 10 seconds
            Console.WriteLine("Finishing..." + result);
        }
    }

当我运行此代码并在10秒内点击Enter时,我的true变量中的值为result,否则为false

每个场景中这个bool值表示什么... 我还需要知道WaitOne的另一个重载的含义/用法,它有一个boolean参数,如下所示......

objAuto.WaitOne(10000,false)

第二个参数是exitContext这是什么类型context退出?

2 个答案:

答案 0 :(得分:1)

如果它返回true则触发事件,如果它返回false,则方法结束,因为达到了超时,而不是因为事件被触发。这在documentation of that method中说明。

答案 1 :(得分:1)

返回值表示事件是否在您指定的超时内发出信号。如果返回值为true,则发出事件信号;如果是假,则超时到期。

exitContext的boolean参数指示是否释放调用此方法的同步上下文。查看更多on MSDN

  

除非从非默认托管上下文中调用exitContext方法,否则WaitOne参数无效。如果您的线程在调用从ContextBoundObject派生的类的实例内部,则会发生这种情况。即使您当前正在对不是从ContextBoundObject派生的类执行方法,例如String,如果当前堆栈中有ContextBoundObject,您也可以处于非默认上下文中应用领域。

     

当您的代码在非默认上下文中执行时,为exitContext指定true会导致线程在执行WaitOne方法之前退出非默认托管上下文(即,转换到默认上下文) 。在调用WaitOne方法完成后,线程返回到原始的非默认上下文。