Suspend()用于挂起线程,Resume()用于继续执行已经挂起的线程。可以使用这两个方法进行线程的同步,和Start()方法有些类似的是:在调用Suspend方法后不会立即的停止,而是执行到一个安全点后挂起。
class Program
{
private static Thread subthread ;
private static string name ="";
static void Main(string[] args)
{
subthread = new Thread(new ThreadStart(GetShow));
subthread.IsBackground = false;
subthread.Name = "子线程";
subthread.Start(); //开启线程
subthread.Suspend(); //挂起
Console.WriteLine(subthread.Name + "挂起");
Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground+",结束");
subthread.Resume(); //执行
Console.WriteLine("主线程结束");
}
static void GetShow()
{
Console.WriteLine("输入姓名:");
name = Console.ReadLine();
Console.WriteLine("执行");
}
}
在开启子线程后立即让他挂起,直到执行了Resume()后恢复线程的执行。注意如果在线程没有挂起时去调用Resume()方法会出现异常,所有使用这样的方法进行线程线程同步已经不推荐使用了。F12查看该方法看到已经进行了Obsolete进行了标记。
线程的同步可以使用互斥体(Mutex)和信号量(Signaling)进行。