下面我們就動手來創建一個線程,使用Thread類別創建線程時,只需提供線程入口即可。線程入口使程式知道該讓這個線程幹什麼事,在C#中,線程入口是透過ThreadStart代理(delegate)來提供的,你可以把ThreadStart理解為一個函數指針,指向線程要執行的函數,當調用Thread. Start()方法後,執行緒就開始執行ThreadStart所代表或說出指向的函數。
打開你的VS.net,新建一個控制台應用程式(Console application),以下這些程式碼將讓你體味到完全控制一個線程的無窮樂趣!
//ThreadTest.cs
using System;
using System.Threading;
{
public void Beta()
{
while (true)
{
Console.WriteLine("Alpha.Beta is running in its own thread.");
}
}
};
public class Simple
{
{
Console.WriteLine("Thread Start/Stop/Join Sample");
Alpha, 〝 〝 〝 ) //這裡建立一個線程,使之執行Alpha類別的Beta()方法
Thread oThread = new因此 Thread.Sleep(1);
oThread.Abort();
o 、] ;
Console.WriteLine();
Console.Wconine(" Console.W長 〔Console.W長〜 Beta 〠〜〵〜〵〝〵〜〝〝〝〝〝〵〜〦〵〦〦. try
{
Console.WriteL("T Console.WriteLine("T Console. Line("T 〜 、〜); oThread.Start();
}
catch (ThreadStateException) Console.Write("ThreadStateException trying to restart Alpha.Beta. ");
Console.Fstarted 完成"connnowuned); Console.ReadLine();
}
return 0;
}
}
}
這段程序包含兩個類Alpha和Simple,在創建線程oThread時我們用指向Alpha.Beta()方法的初始化了ThreadStart代理(delegate)對象,當我們建立的執行緒oThread呼叫oThread.Start()方法啟動時,實際上程式執行的是Alpha.Beta()方法:
Alpha oAlpha = new Alpha();
Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));
oThread.Start();
接著在Main()函數的while循環中,我們使用靜態方法Thread.Sleep()讓主執行緒停止了1ms,這段時間CPU轉向執行緒oThread。然後我們試著用Thread.Abort()方法終止執行緒oThread,注意後面的oThread.Join(),Thread.Join()方法讓主執行緒等待,直到oThread執行緒結束。你可以給Thread.Join()方法指定一個int型的參數作為等待的最長時間。之後,我們試著用Thread.Start()方法重新啟動線程oThread,但是顯然Abort()方法帶來的後果是不可恢復的終止線程,所以最後程式會拋出ThreadStateException異常
以上就是C#的多線程機制初探(2)的內容,更多相關內容請關注PHP中文網(www.php.cn)!