c#中的autoreseteevent . waitone()方法返回值
本文关键字:方法 返回值 waitone 中的 autoreseteevent | 更新日期: 2023-09-27 17:54:48
我有以下代码:
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
。
这个bool值在每个场景中表示什么…我还需要知道WaitOne
的另一个过载的含义/使用,它有一个boolean
参数,如下…
objAuto.WaitOne(10000,false)
第二个参数是exitContext
这是什么这是什么样的context
?
返回值指示事件是否在指定的超时时间内发出信号。如果返回值为true,则事件已发出信号;如果为false,则表示超时。
exitContext
的布尔参数表示是否释放调用该方法的同步上下文。在MSDN上查看更多信息。
exitContext
参数没有作用,除非WaitOne
方法是从非默认的托管上下文中调用的。如果您的线程位于对ContextBoundObject
派生类的实例的调用中,则可能发生这种情况。即使你当前正在执行一个不是从ContextBoundObject
派生的类上的方法,比如String
,如果ContextBoundObject
在当前应用程序域中的堆栈上,你也可以处于非默认上下文中。当您的代码在非默认上下文中执行时,为
exitContext
指定true会导致线程在执行WaitOne
方法之前退出非默认托管上下文中(即转换到默认上下文中)。在调用WaitOne
方法完成后,线程返回到原始的非默认上下文。
如果它返回true则事件被触发,如果它返回false则方法结束,因为超时已达到,而不是因为事件被触发。