using System;
using System.IO;
using System.Text;
using System.Threading;
namespace ThreadingDemo
{
/// <summary>
/// AutoResetEvent及ManualResetEvent: 主要目的是使线程同步执行:
/// 1. 线程1:在当前线程方法中调用_waitHandle1.WaitOne(), 使线程1阻塞。(_waitHandle1: 一个AutoResetEvent对象或一个ManualResetEvent对象)
/// 2. 在其它线程(例如主线程)中调用_waitHandle1.Set(), 恢复线程1的执行, 方法从_waitHandle1.WaitOne()处向后执行。
/// 3. AutoResetEvent与ManualResetEvent的主要区别是:
/// a. AutoResetEvent.Set()每次只能恢复一个WaitOne()
/// b. ManualResetEvent.Set()一次恢复所有的WaitOne(), 请参见ManualResetEvent示例.
/// </summary>
class Program
{
static EventWaitHandle _waitHandle1 = new AutoResetEvent(false);
static EventWaitHandle _waitHandle2 = new AutoResetEvent(false);
static EventWaitHandle _waitHandleManual = new ManualResetEvent(false);
static EventWaitHandle _waitHandleAuto = new AutoResetEvent(false);
static void Main(string[] args)
{
// 1. AutoResetEvent示例1
new Thread(WaiterAuto).Start();
while (true)
{
Console.WriteLine("Press <Enter> to release threads.");
Console.ReadLine();
_waitHandleAuto.Set();
}
// 2. ManualResetEvent示例
/*
new Thread(WaiterMa
c# - 线程 Thread AutoResetEvent 与 ManualResetEvent
最新推荐文章于 2025-02-10 19:00:00 发布