我有以下代码:
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
退出?
答案 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
方法完成后,线程返回到原始的非默认上下文。