C# C中的AutoResetEvent.WaitOne()方法返回值#
我有以下代码:C# C中的AutoResetEvent.WaitOne()方法返回值#,c#,multithreading,C#,Multithreading,我有以下代码: class Program { static AutoResetEvent objAuto = new AutoResetEvent(false); static void Main(string[] args) { ThreadPool.QueueUserWorkItem(new WaitCallback(SetState)); Console.ReadLine();
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
时,我在result
变量中得到值true
,否则false
该布尔值在每个场景中表示什么。。。
我还需要知道另一个重载WaitOne
的含义/用法,它有一个boolean
参数,如下所示
objAuto.WaitOne(10000,false)
第二个参数是
exitContext
这是什么?这是什么类型的context
退出?如果返回true,则事件被触发;如果返回false,则方法结束是因为达到了超时,而不是因为事件被触发。这在中有说明。返回值指示事件是否在指定的超时内发出信号。如果返回值为true,则发出事件信号;如果为false,则超时已过期
exitContext
的布尔参数指示是否释放调用此方法的同步上下文。看更多
除非从非默认托管上下文中调用WaitOne
方法,否则exitContext
参数无效。如果线程位于对从ContextBoundObject
派生的类的实例的调用中,则可能发生这种情况。即使您当前正在对不是从ContextBoundObject
派生的类(如String
)执行方法,如果ContextBoundObject
位于当前应用程序域的堆栈上,您也可以处于非默认上下文中
当代码在非默认上下文中执行时,为exitContext
指定true会导致线程在执行WaitOne
方法之前退出非默认托管上下文(即转换到默认上下文)。对WaitOne
方法的调用完成后,线程返回到原始的非默认上下文
假设您已经阅读了MSDN文章-请解释您不了解的内容?请不要在同一篇文章中问两个单独的问题。AutoResetEvent的MSDN文章没有说明WaitOne()返回的内容,但关于其基类的文章有说明。愚蠢的微软。