1

我有以下代码:

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);
        }
    }

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

这个布尔值在每种情况下表示什么......我还需要知道另一个重载的含义/使用,WaitOne它的boolean参数如下......

objAuto.WaitOne(10000,false)

第二个参数是exitContextwhat is this contextthis exit 是什么样的?

4

2 回答 2

1

如果它返回 true 则事件被触发,如果它返回 false 则方法结束是因为达到了超时,而不是因为事件被触发了。该方法的文档中对此进行了说明。

于 2013-01-21T16:35:41.147 回答
1

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

for 的布尔参数exitContext指示是否释放调用此方法的同步上下文。在 MSDN 上查看更多信息。

除非从非默认托管上下文中调用该方法,否则该exitContext参数无效。WaitOne如果您的线程在对从ContextBoundObject. 即使您当前正在对不从 派生的类执行方法ContextBoundObject,例如,如果 a在当前应用程序域的堆栈中String,您也可以处于非默认上下文中。ContextBoundObject

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

于 2013-01-21T16:36:33.547 回答