using System;
using System.Threading;
namespace program
{
class wangjun
{
static void Main(string[] args)
{
//构建一个AutoResetEvent对象(刚开始它没有收到信号)
AutoResetEvent are = new AutoResetEvent(false);
//告诉线程池等待AutoResetEvent对象
RegisteredWaitHandle rwh = ThreadPool.RegisterWaitForSingleObject(
are, //等待AutoResetEvent对象
EventOperation, //回调该方法
null, //将null传递给EventOperation
5000, //用5秒种时间等待事件发送信号
false //每一次当事件的信号被发送后都调用EventOperation方法
);
//进入循环
Char operation;
do
{
Console.WriteLine("S=Signal Q=Quit? ");
operation = char.ToUpper(Console.ReadKey(true).KeyChar);
if (operation == 'S')
{
are.Set();
}
} while (operation !='Q');
}
//一旦事件的信号已被发送,或者最后一个信号或超时值已经过去了5秒钟,就调用这个方法
private static void EventOperation(object state, Boolean timeout)
{
if (timeout)
{
Console.WriteLine("Timedout while waiting for the AutoResetEvent. ");
}
else
{
Console.WriteLine("The AutoResetEvent became signaled. ");
}
}
}
}