在下例中,线程由 Main
函数创建和启动。 新线程使用 WaitOne 方法等待事件。 该线程将被挂起,直到由执行 Main
函数的主线程对事件发出信号。 事件发出信号后,辅助线程返回。 在这种情况下,因为该事件仅用于激活一个线程,因此可使用 AutoResetEvent 或 ManualResetEvent 类。
using System;
using System.Collections.Generic;
using System.Threading;
class Program
{
private static AutoResetEvent auto = new AutoResetEvent(true);
static List<int> list = new List<int>
{
};
static int i;
static void Main(string[] args)
{
int t = 10;
for (int i = 1; i <= 10;i++)
{
list.Add(i);
}
int tt = t;
ThreadStart ts1 = new ThreadStart(PrintOdd);
Thread t1 = new Thread(ts1);
ThreadStart ts2 = new ThreadStart(PrintEven);
Thread t2 = new Thread(ts2);
t1.Start();
Thread.Sleep(10);
// t2.Start();
Console.Read();
}
//打印1~100中的奇数
public static void PrintOdd()
{
for (i = 1; i <= 3;i ++)
{
auto.WaitOne();
if(i>3)
{
break;
}
Console.WriteLine(i);
auto.Set();
}
}
//打印0~100中的偶数
public static void PrintEven()
{
for (; i <= 3;i ++)
{
auto.WaitOne();
if (i > 3)
{
break;
}
Console.WriteLine(i);
auto.Set();
}
}
}
using System;
using System.Threading;
class Program
{
private static AutoResetEvent auto = new AutoResetEvent(true);
static void Main(string[] args)
{
int t = 10;
int i;
i = t--;
i = --t;
int tt = t;
ThreadStart ts1 = new ThreadStart(PrintOdd);
Thread t1 = new Thread(ts1);
ThreadStart ts2 = new ThreadStart(PrintEven);
Thread t2 = new Thread(ts2);
t2.Start();
Thread.Sleep(10);
t1.Start();
Console.Read();
}
//打印1~100中的奇数
public static void PrintOdd()
{
for (int i = 1; i <= 10; i = i + 2)
{
auto.WaitOne();
Console.WriteLine(i);
auto.Set();
}
}
//打印0~100中的偶数
public static void PrintEven()
{
for (int i = 0; i <= 10; i = i + 2)
{
auto.WaitOne();
Console.WriteLine(i);
auto.Set();
}
}
}
C#复制
using System;
using System.Threading;
class ThreadingExample
{
static AutoResetEvent autoEvent;
static void DoWork()
{
Console.WriteLine(" worker thread started, now waiting on event...");
autoEvent.WaitOne();
Console.WriteLine(" worker thread reactivated, now exiting...");
}
static void Main()
{
autoEvent = new AutoResetEvent(false);
Console.WriteLine("main thread starting worker thread...");
Thread t = new Thread(DoWork);
t.Start();
Console.WriteLine("main thread sleeping for 1 second...");
Thread.Sleep(1000);
Console.WriteLine("main thread signaling worker thread...");
autoEvent.Set();
}
}