using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace NetThreading.UserThread
{
/// <summary>
/// ManualAutoResetEvent的用法
/// </summary>
public class ManualResetEventApp:IMain
{
#region IMain 成员
public void MainRun()
{
Console.WriteLine("ManualResetEvent ---------------------------------");
//指定ManualResetEvent的初始状态为无信号状态,ManualResetEvent等待5秒后超时,
//ManualResetEvent的状态仍是无信号状态
Console.WriteLine("ManualResetEvent default state:fase ");
ManualResetEvent manualResetEvent = new ManualResetEvent(false);
//ManualResetEvent 初始值为false,ManualResetEvent一直等待有信号,等待超时时间为5s
Console.WriteLine("ManualResetEvent 初始值为false,ManualResetEvent一直等待有信号,等待超时时间为5s");
bool currentResult=manualResetEvent.WaitOne(TimeSpan.FromSeconds(5));
Console.WriteLine(string.Format("ManualResetEvent:After wait State:{0}",currentResult));
//指定ManualResetEvent的初始状态为有信号状态,ManualResetEvent等待5秒后超时,
//ManualResetEvent的状态仍是有信号状态
Console.WriteLine("ManualResetEvent default state:true ");
manualResetEvent = new ManualResetEvent(true );
//ManualResetEvent 初始值为true,ManualResetEvent不用等待,超时时间不起作用
Console.WriteLine("ManualResetEvent 初始值为true,ManualResetEvent不用等待,超时时间不起作用");
currentResult = manualResetEvent.WaitOne(TimeSpan.FromSeconds(5));
Console.WriteLine(string.Format("ManualResetEvent:After wait State:{0}", currentResult));
//改变信号状态
Console.WriteLine("改变信号状态");
Console.WriteLine("ManualResetEvent default state:fale ");
manualResetEvent = new ManualResetEvent(false );
Console.WriteLine("will set");
manualResetEvent.Set();
Console.WriteLine("ManualResetEvent 设置为有信号,状态改变,ManualResetEvent不会等待");
Console.WriteLine("after set ");
currentResult = manualResetEvent.WaitOne(TimeSpan.FromSeconds(10));
Console.WriteLine(string.Format("ManualResetEvent:After wait State:{0}", currentResult));
Console.WriteLine("AutoResetEvent 再次等待(超时时间10s)");
currentResult = manualResetEvent.WaitOne(TimeSpan.FromSeconds(10));
Console.WriteLine(string.Format("manualResetEvent:After wait State:{0}", currentResult));
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace NetThreading.UserThread
{
/// <summary>
/// AutoResetEventApp的用法
/// </summary>
public class AutoResetEventApp:IMain
{
#region IMain 成员
public void MainRun()
{
Console.WriteLine("AutoResetEvent ---------------------------------");
//指定AutoResetEvent的初始状态为无信号状态,AutoResetEvent等待5秒后超时,
//AutoResetEvent的状态仍是无信号状态
Console.WriteLine("AutoResetEvent default state:fase ");
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
//AutoResetEvent 初始值为false,AutoResetEvent一直等待有信号,等待超时时间为5s
Console.WriteLine("AutoResetEvent 初始值为false,AutoResetEvent一直等待有信号,等待超时时间为5s");
bool currentResult = autoResetEvent.WaitOne(TimeSpan.FromSeconds(5));
Console.WriteLine(string.Format("AutoResetEvent:After wait State:{0}", currentResult));
//指定AutoResetEvent的初始状态为有信号状态,AutoResetEvent等待5秒后超时,
//AutoResetEvent的状态仍是有信号状态
Console.WriteLine("AutoResetEvent default state:true ");
autoResetEvent = new AutoResetEvent(true);
//AutoResetEvent 初始值为true,AutoResetEvent不用等待,超时时间不起作用
Console.WriteLine("AutoResetEvent 初始值为true,AutoResetEvent不用等待,超时时间不起作用");
currentResult = autoResetEvent.WaitOne(TimeSpan.FromSeconds(5));
Console.WriteLine(string.Format("AutoResetEvent:After wait State:{0}", currentResult));
//改变信号状态
Console.WriteLine("改变信号状态");
Console.WriteLine("AutoResetEvent default state:fale ");
autoResetEvent = new AutoResetEvent(false);
Console.WriteLine("will set");
autoResetEvent.Set();
Console.WriteLine("AutoResetEvent 设置为有信号,状态改变,AutoResetEvent不会等待");
Console.WriteLine("after set ");
currentResult = autoResetEvent.WaitOne(TimeSpan.FromSeconds(10));
Console.WriteLine(string.Format("AutoResetEvent:After wait State:{0}", currentResult));
Console.WriteLine("AutoResetEvent 再次等待(超时时间10s)");
currentResult = autoResetEvent.WaitOne(TimeSpan.FromSeconds(10));
Console.WriteLine(string.Format("AutoResetEvent:After wait State:{0}", currentResult));
}
#endregion
}
}
ManualResetEvent与AutoResetEvent都是在没有信号的情况下等待。一旦有信号,两者都是立即执行,不等待。
ManualResetEvent:信号发生改变之后在下一次等待中信号状态不会发生变化,而AutoResetEvent在信号发生之后再次等待,它的信号状态又被自动重置为无信号。