Console.WriteLine("Thread Start/Stop/Join Sample");
Alpha oAlpha = new Alpha();
//8le://这里创建一个线程,使之执行Alpha类的Beta()方法
Thread oThread = new Thread(new ThreadStart(oAlpha.Beta));
oThread.Start();
while (!oThread.IsAlive)
Thread.Sleep(1);
oThread.Abort();
oThread.Join();
Console.WriteLine();
Console.WriteLine("Alpha.Beta has 8nished");
try
{
Console.WriteLine("Try to restart the Alpha.Beta thread");
oThread.Start();
}
catch (ThreadStateException)
{
Console.Write("ThreadStateException trying to restart Alpha.Beta. ");
Console.WriteLine("Expected since aborted threads cannot be restarted.");
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 异常。
主线程 Main()函数
所有线程都是依附于 Main()函数所在的线程的,Main()函数是 C#程序的入口,起始线程可以称之为
主线程。如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条件终止。
所有的线程虽然在微观上是串行执行的,但是在宏观上你完全可以认为它们在并行执行。
Thread.ThreadState 属性
这个属性代表了线程运行时状态,在不同的情况下有不同的值,我们有时候可以通过对该值的判断来
设计程序流程。
ThreadState 属性的取值如下: