01.開啟線程
通過Thread類建立了一個線程對象,然後通過IsBackground屬性指明該線程為背景線程,如果不設定,預設為前台線程。由于前台線程執行完畢後CLR會無條件的中止背景線程的運作,是以在前面的代碼中,若是啟動了背景線程,主線程将會繼續執行。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("前台線程ID:"+Thread.GetCurrentProcessorId());
Thread thread=new Thread(Worker);
thread.IsBackground = true; //是否為背景線程
thread.Start();
Console.ReadKey();
}
public static void Worker()
{
Console.WriteLine("背景線程ID:"+Thread.GetCurrentProcessorId());
Thread.Sleep(2000); //線程休眠2秒
Console.WriteLine("背景線程退出");
}
}
02.
Join()方法能保證主線程(前台線程)在異步線程thread(背景線程)運作結束後才會運作。
使用函數Join來實作,確定主線程會在背景線程結束後才開始運作
使用Join的時候,主線程會等待背景線程結束之後才能繼續執行。前面的代碼中,我們使用了Thread構造函數來建立線程對象
static void Main(string[] args)
{
Thread backthread=new Thread(Worker);
backthread.IsBackground = true; //背景線程
backthread.Start();
backthread.Join(); //保證背景線程完成之後調用主線程
Thread.Sleep(1000);
Sum();
}
private static void Sum()
{
Console.WriteLine("this is main thread" );
Console.WriteLine("Return from Main Thread");
}
private static void Worker()
{
Thread.Sleep(2000);
Console.WriteLine("Return from Worker Thread");
}
03.執行帶參數的線程
static void Main(string[] args)
{
// 建立一個新線程(預設為前台線程)
//如果新線程上運作帶參數的方法,需要用到ParameterizedThreadStart委托,
//TreadStart委托僅僅指向無參數且無傳回值的方法
//要求隻能有一個參數,且為object類型 無傳回值
Thread backthread = new Thread(new ParameterizedThreadStart(Worker));
backthread.Start(111);
Sum();
}
private static void Sum()
{
Console.WriteLine("this is main thread" );
Console.WriteLine("Return from Main Thread");
}
private static void Worker(object obj)
{
Thread.Sleep(2000);
Console.WriteLine("Return from Worker Thread:"+obj);
}