1、创建线程
使用最基础的Thread来创建线程
PrintNumbers同时运行在主线程和另一个线程中
static void Main(string[] args) { Thread t= new Thread(PrintNumbers); t.Start(); PrintNumbers(); } static void PrintNumbers() { System.Console.WriteLine("Starting..."); for (int i = 1; i < 10; i++) { System.Console.WriteLine("当前线程:" + Thread.CurrentThread.ManagedThreadId.ToString()); System.Console.WriteLine(i); } System.Console.ReadLine(); }
2、线程等待(sleep)
sleep,线程等待
public void Main() { Thread t = new Thread(PrintNumberWidthDelay); t.Start(); PrintNumbers(); } private void PrintNumbers() { WriteLine("Starting..."); for (int i = 1; i < 10; i++) { WriteLine(i); } ReadLine(); } private void PrintNumberWidthDelay() { WriteLine("Starting..."); for (int i = 0; i < 10; i++) { Thread.Sleep(TimeSpan.FromSeconds(2)); WriteLine(i); } }
程序会先把主线程的执行完,然后再2秒执行另一个线程
3、线程等待,实现主线线程等待另一个线程执行完成,使用该线程的结果代码(join)
public static void PringNumbersWithDelay() { WriteLine("starting..."); for (int i = 0; i < 10; i++) { Sleep(TimeSpan.FromSeconds(2)); WriteLine(i); } } public static void Print() { WriteLine("start..."); Thread t = new Thread(PringNumbersWithDelay); t.Start(); t.Join();//等待线程执行完毕 WriteLine("Thread completed"); ReadLine(); }
4、线程终止(不推荐使用Abort来中止一个线程,可使用CancellationToken来取消线程的执行)
Thread t1 = new Thread(PringNumbersWithDelay);
t1.Abort();//中止当前线程
5、检测线程状态(ThreadState)
public static void PringNumbersWithDelay() { WriteLine("starting..."); WriteLine(CurrentThread.ThreadState.ToString()); for (int i = 0; i < 10; i++) { Sleep(TimeSpan.FromSeconds(2)); WriteLine(i); } } static void DoNothing() { Sleep(TimeSpan.FromSeconds(2)); } public static void Print() { WriteLine("Starting Program....."); Thread t1 = new Thread(PringNumbersWithDelay); Thread t2 = new Thread(DoNothing); WriteLine(t1.ThreadState.ToString()); t2.Start(); t1.Start(); for (int i = 0; i < 30; i++) { WriteLine(t1.ThreadState.ToString()); } Sleep(TimeSpan.FromSeconds(6)); t1.Abort(); WriteLine("A thread has been Aborted"); WriteLine(t1.ThreadState.ToString()); WriteLine(t2.ThreadState.ToString()); ReadLine(); }