信息
您所需的主题如下所示。但此主题未包含在此库中。

ThreadState 枚举

2013/12/13

指定 Thread 的执行状态。

此枚举具有一个 FlagsAttribute 属性,该属性允许对其成员值进行按位组合。

Namespace:  System.Threading
程序集:  mscorlib(位于 mscorlib.dll 中)

[FlagsAttribute]
public enum ThreadState

成员名称说明
Aborted线程状态包括 AbortRequested 并且该线程现在已死,但其状态尚未更改为 Stopped
AbortRequested已对线程调用了 Thread.Abort 方法,但线程尚未收到试图终止它的挂起的 System.Threading.ThreadAbortException
Background线程正作为后台线程执行(相对于前台线程而言)。此状态可以通过设置 Thread.IsBackground 属性来控制。
Running线程已启动,它未被阻塞,并且没有挂起的 ThreadAbortException
Stopped线程已停止。
StopRequested正在请求线程停止。这仅用于内部。
Suspended线程已挂起。
SuspendRequested该线程已被标记为挂起。
Unstarted尚未对线程调用 Thread.Start 方法。
WaitSleepJoin线程已被阻止。这可能是因为:调用 Thread.SleepThread.Join、请求锁定(例如通过调用 Monitor.EnterMonitor.Wait)或等待线程同步对象(例如 ManualResetEvent)。

ThreadState 为线程定义了一组所有可能的执行状态。一旦线程被创建,它就至少处于其中一个状态中,直到终止。在公共语言运行时中创建的线程最初处于 Unstarted 状态,而进入运行时的外部线程则已经处于 Running 状态。通过调用 Start 方法可以将 Unstarted 线程转换为 Running 状态。并非所有的 ThreadState 值的组合都是有效的;例如,线程不能同时处于 AbortedUnstarted 状态中。

重要说明重要说明:

只有在一些调试情形中才会涉及线程状态。始终不应在代码中使用线程状态来同步线程活动。

下表显示了导致状态更改的操作。

操作

ThreadState

在公共语言运行时中创建线程。

Unstarted

该线程的 Start 方法被另一个线程调用。

Unstarted

线程开始运行。

Running

线程调用 Sleep

WaitSleepJoin

线程调用 Wait 或进行其他某个阻止调用。

WaitSleepJoin

线程对其他线程调用 Join

WaitSleepJoin

公共语言运行时将线程标记为挂起,例如为了进行垃圾回收。

SuspendRequested

线程被挂起。

Suspended

线程在挂起之后恢复操作。

Running

另一个线程对此线程调用 Thread.Abort

AbortRequested

线程被终止。

Stopped

线程的 Thread.IsBackground 属性被该线程本身或另一个线程设置为 true

Background

在某个给定时间线程可处于多个状态中。例如:

  • Background 状态可以与其他任何状态组合。

  • 如果线程在调用 Monitor.Wait 时被阻止,并且系统中止了线程,则阻止线程将同时处于 WaitSleepJoinAbortRequested 状态。在这种情况下,该线程一旦从对 Wait 的调用中返回或被中断,则它将接收 ThreadAbortException 并开始中止。

线程的 Thread.ThreadState 属性提供线程的当前状态。应用程序必须使用位屏蔽来确定线程是否在运行。因为 Running 的值为 0(零),所以可使用 C# 代码(例如 (myThread.ThreadState And (ThreadState.Stopped Or ThreadState.Unstarted)) = 0)或 Visual Basic 代码(例如 (myThread.ThreadState & (ThreadState.Stopped | ThreadState.Unstarted)) == 0)测试线程是否在运行。

Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: