天天看點

【多線程-Suspend()和Resume()方法】

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("執行");
        }
    }
           
【多線程-Suspend()和Resume()方法】

在開啟子線程後立即讓他挂起,直到執行了Resume()後恢複線程的執行。注意如果線上程沒有挂起時去調用Resume()方法會出現異常,所有使用這樣的方法進行線程線程同步已經不推薦使用了。F12檢視該方法看到已經進行了Obsolete進行了标記。

【多線程-Suspend()和Resume()方法】

線程的同步可以使用互斥體(Mutex)和信号量(Signaling)進行。