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)進行。