C#线程从陌生到熟悉(2)
首先我们来看看线程的状态
线程状态
表1-1 ThreadState定义的枚举常数
成员名称
说 明
Aborted
线程处于Stopped状态中
AbortRequested
已对线程调用了Thread.Abort方法,但线程尚未收到试图终止它的挂起的System.Threading. ThreadAbortException
Background
线程正作为后台线程执行(相对于前台线程而言)。此状态可以通过设置Thread.IsBackground属性来控制
Running
线程已启动,它未被阻塞,并且没有挂起的ThreadAbortException
Stopped
线程已停止
StopRequested
正在请求线程停止。这仅用于内部
Suspended
线程已挂起
SuspendRequested
正在请求线程挂起
Unstarted
尚未对线程调用Thread.Start方法
WaitSleepJoin
由于调用Wait、Sleep或Join,线程已被阻止
Thread对象的ThreadState属性提供一个由ThreadState定义的位掩码,它指示线程的当前状态。一个线程至少总是处于ThreadState枚举中定义的一个可能状态,并且可以同时处于多个状态。
注意,只能在一些调试方案中使用线程状态,而不应该在代码中使用线程状态来同步线程活动。
在创建托管线程时,该线程处于Unstarted状态。线程会保持Unstarted状态,直到易做图作系统调度到已启动状态。调用Start方法使操作系统知道该线程可启动,但是它并不直接更改线程的状态。一旦线程处于已启动的状态中,就可以执行许多操作来使线程更改状态。表1-2列出了使状态发生更改的操作,以及相应的新状态。
表1-2 使线程状态发生更改的操作及相应的新状态
操 作
ThreadState
在公共语言运行库中创建线程
Unstarted
线程调用Start
Unstarted
线程开始运行
Running
续表
操 作
ThreadState
线程调用Sleep
WaitSleepJoin
线程对其他对象调用Wait
WaitSleepJoin
线程对其他线程调用Join
WaitSleepJoin
另一个线程调用Interrupt
Running
另一个线程调用Suspend
SuspendRequested
线程响应Suspend请求
Suspended
另一个线程调用Resume
Running
另一个线程调用Abort
AbortRequested
线程响应Abort请求
Stopped
线程被终止
Stopped
Abort方法,调用该方法后,在当前线程中引发一个T
补充:软件开发 , C# ,
上一个:扯淡异步
下一个:C#线程从陌生到熟悉(1)