class
Program
{
/**//// <summary>
/// ManualResetEvent建立时是把false作为start的初始状态,这个类用于通知另一个线程,让它等待一个或多个线程。
/// 如这个例子中,等待线程thread1线程调用mre.WaitOne(), 用于发信号的线程调用mre.Set().
/// </summary>
public static ManualResetEvent mre = new ManualResetEvent(false);
public static void trmain()
{
Thread tr = Thread.CurrentThread;
Console.WriteLine(tr.Name + " 开始第一波等待");
mre.WaitOne(); //等到什么时候呢?等到mre.Set()被调用
Console.WriteLine(tr.Name + " 第一波启动t");
mre.Reset(); //再次重置
Console.WriteLine(tr.Name + " 开始第二波等待");
mre.WaitOne(); //再次等待
Console.WriteLine(tr.Name + " 第二波启动");
for (int x = 0; x < 10; x++)
{
Thread.Sleep(1000);
Console.WriteLine(tr.Name + ": " + x);
}
}
static void Main(string[] args)
{
Thread thrd1 = new Thread(new ThreadStart(trmain));
thrd1.Name = "thread1";
thrd1.Start();
Thread thrd2 = new Thread(new ThreadStart(trmain));
thrd2.Name = "thread2";
thrd2.Start();
for (int x = 0; x < 10; x++)
{
Thread.Sleep(900);
Console.WriteLine("Main :" + x);
if (5 == x)
{
mre.Set(); //子线程的mre.WaitOne()可以执行了。第一次等待进程
//; //如果什么都不做呢,mre.Wait()那个线程就一直等在那里了?
}
}
while (thrd1.IsAlive)
{
Thread.Sleep(1000);
Console.WriteLine("Main: waiting for thread to stop");
mre.Set(); //第二次通知等待进程
}
}
}
{
/**//// <summary>
/// ManualResetEvent建立时是把false作为start的初始状态,这个类用于通知另一个线程,让它等待一个或多个线程。
/// 如这个例子中,等待线程thread1线程调用mre.WaitOne(), 用于发信号的线程调用mre.Set().
/// </summary>
public static ManualResetEvent mre = new ManualResetEvent(false);
public static void trmain()
{
Thread tr = Thread.CurrentThread;
Console.WriteLine(tr.Name + " 开始第一波等待");
mre.WaitOne(); //等到什么时候呢?等到mre.Set()被调用
Console.WriteLine(tr.Name + " 第一波启动t");
mre.Reset(); //再次重置
Console.WriteLine(tr.Name + " 开始第二波等待");
mre.WaitOne(); //再次等待
Console.WriteLine(tr.Name + " 第二波启动");
for (int x = 0; x < 10; x++)
{
Thread.Sleep(1000);
Console.WriteLine(tr.Name + ": " + x);
}
}
static void Main(string[] args)
{
Thread thrd1 = new Thread(new ThreadStart(trmain));
thrd1.Name = "thread1";
thrd1.Start();
Thread thrd2 = new Thread(new ThreadStart(trmain));
thrd2.Name = "thread2";
thrd2.Start();
for (int x = 0; x < 10; x++)
{
Thread.Sleep(900);
Console.WriteLine("Main :" + x);
if (5 == x)
{
mre.Set(); //子线程的mre.WaitOne()可以执行了。第一次等待进程
//; //如果什么都不做呢,mre.Wait()那个线程就一直等在那里了?
}
}
while (thrd1.IsAlive)
{
Thread.Sleep(1000);
Console.WriteLine("Main: waiting for thread to stop");
mre.Set(); //第二次通知等待进程
}
}
}