AutoResetEvent笔记

using System;
using System.Threading;

namespace ThreadPoolTest
{
    class Program
    {
        //用false实例化时,asy为非终止状态,即可用状态。此时调用WaitOne()方法会阻塞等待线程
        static AutoResetEvent asy = new AutoResetEvent(false);
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(new WaitCallback(Threadproc),"This is a test");
            Console.WriteLine("这是主线程!");
            //等待事件信号,当收到一个事件信号(等待句柄)时,执行下面代码。执行完后把asy的状态改成非终止状态,即可用状态。等待下一次收到事件信号(等待句柄)。这样确保每个等待句柄只有一个等待线程执行
            asy.WaitOne();
            Console.WriteLine("主线程退出!");
            Console.ReadLine();
        }
        //因为public delegate void WaitCallback(object state),所以回调方法必须有一个object参数
        static void Threadproc(object o)
        {
            string s = o as String;
            Console.WriteLine("这是线程池中的线程!");
            Console.WriteLine(s);
            //调用set()方法,通知等待线程已发生了一个事件,即有一个等待句柄可用。当前线程会通知等待线程,可以执行。此时asy为true(终止状态),即不可用状态。
            asy.Set();
        }
    }

}

 

你可能感兴趣的:(event)