使用Thread类创建线程时,需要提供线程的入口。线程入口使程序知道该让这个线程干什么事儿。
1、初始化一个线程的实例:
Thread.Thread(ThreadStart start);
ThreadStart:A System.Threading.ThreadStart delegate that represents the methods to be invoked when this thread begins executing.
在C#中,线程入口是通过ThreadStart代理来提供的,可以把ThreadStart理解为一个函数指针,指向线程要执行的函数,当调用Thread.Start()方法后,线程就开始执行ThreadStart所代表或者指向的函数。
2、方法
(1)、Start()
(2)、Sleep()
(3)、Abort()
(4)、Join():使主线程等待,直到创建的线程结束。
3、前后台线程
所有的线程都依附于主线程。如果所有的前台线程都停止了,那么主线程可以终止,而所有的后台线程都将无条件终止。
后台线程跟前台线程只有一个区别:后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,CLR将通过调用任何一个存活的后台进程的Abort()方法来彻底终止进程。
4、Thread.ThreadState
(1)、Aborted:线程已停止;
(2)、AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止;
(3)、Background:线程在后台执行,与属性Thread.IsBackground有关;
(4)、Running:线程正在征程运行;
(5)、Stopped:线程已被停止;
(6)、StopRequested:线程正在被要求停止;
(7)、Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行);
(8)、SuspendRequested:线程正在要求被挂起,但是未来得及响应;
(9)、Unstarted:未调用Thread.Start()开始线程的运行;
(10)、WaitSleepJoin:线程因调用了Wait(),Sleep()或Join()等方法处于封锁状态;
5、线程优先级
当线程之间争夺CPU时间时,CPU是按照线程的优先级给予服务的。在C#应用程序中,用户可以设定5个不同的优先级,由高到低分别是Highest,AboveNormal,Normal,BelowNormal,Lowest,在创建线程时如果不指定优先级,那么系统默认为ThreadPriority.Normal。
给一个线程指定优先级,我们可以使用如下代码:
//设定优先级为最低
myThread.Priority=ThreadPriority.Lowest;
通过设定线程的优先级,我们可以安排一些相对重要的线程优先执行,例如对用户的响应等等。