C# ThreadState属性

这个属性代表了线程运行时状态,在不同的情况下有不同的值,我们有时候可以通过对该值的判断来设计程序流程。

ThreadState 属性的取值如下:

Aborted:线程已停止;

AbortRequested:线程的Thread.Abort()方法已被调用,但是线程还未停止;

Background:线程在后台执行,与属性Thread.IsBackground有关;

Running:线程正在正常运行;

Stopped:线程已经被停止;

StopRequested:线程正在被要求停止;

Suspended:线程已经被挂起(此状态下,可以通过调用Resume()方法重新运行);

SuspendRequested:线程正在要求被挂起,但是未来得及响应;

Unstarted:未调用Thread.Start()开始线程的运行;

WaitSleepJoin:线程因为调用了Wait(),Sleep()或Join()等方法处于封锁状态;

上面提到了Background状态表示该线程在后台运行,那么后台运行的线程有什么特别的地方呢?其实后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,CLR(通用语言运行环境)将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。

时间: 2024-10-21 07:21:11

C# ThreadState属性的相关文章

C#中的多线程状态

图1: 线程状态关系图 你可以通过ThreadState属性获取线程的执行状态.图1将ThreadState列举为“层”.ThreadState被设计的很恐怖,它以按位计算的方式组合三种状态“层”,每种状态层的成员它们间都是互斥的,下面是所有的三种状态“层”: 运行 (running) / 阻止 (blocking) / 终止 (aborting) 状态(图1显示)后台 (background) / 前台 (foreground) 状态 (ThreadState.Background)不建议使用

注意!你的Thread.Abort方法真的让线程停止了吗?

大家都知道在C#里面,我们可以使用 Thread.Start方法来启动一个线程,当我们想停止执行的线程时可以使用Thread.Abort方法来强制停止正在执行的线程,但是请注意,你确定调用了Thread.Abort方法后线程就立刻停止了吗? 答案是:不是! 下面我们来解释一下Abort方法是如何工作的.因为公用语言运行时管理了所有的托管的线程,同样它能在每个线程内抛出异常.Abort方法能在目标线程中抛出一个ThreadAbortException异常从而导致目标线程的终止.不过Abort方法被

c#之线程入门

C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程.这里的一个简单的例子及其输出: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Thread

C# 多线程(二) 线程同步基础

本系列的第一篇简单介绍了线程的概念以及对线程的一些简单的操作,从这一篇开始讲解线程同步,线程同步是多线程技术的难点.线程同步基础由以下几个部分内容组成 1.同步要领(Synchronization Essentials) 2.锁(Locking) 3.线程安全(Thread Safety) 4.事件等待句柄(Signaling with Event Wait Handles) 5.同步上下文(Synchronization Contexts) 同步要领(Synchronization Essen

[2014-9-12]多线程

又到周五了,日子过的好快. 线程默认情况下都是前台线程,所有的前台线程退出后程序才会推出. 进程中默认的线程叫主线程或者UI线程. 只要有一个前台线程在运行,应用程序进程就在运行,如果多个前台线程在运行,而Main方法结束了,应用程序进程仍然是激活的,直至所有的前台线程完成. 线程重入:多个线程访问同一资源,可造成不同步的情况,使用关键字lock(this). 调用Thread的start方法,可以创建线程,在调用Start方法后,新线程仍不是处于running状态,而是Unstarted状态,

C#多线程实践——线程状态

线程状态关系图 在.NET Framework中,可以通过ThreadState属性获取线程的执行状态.上图标识出三种状态“层”,ThreadState以按位计算的方式组合状态层,每种状态层的成员之间都是互斥的,下面是所有的三种状态“层”: 运行 (running) / 阻止 (blocking) / 终止 (aborting) 状态(上图显示) 后台 (background) / 前台 (foreground) 状态 (ThreadState.Background) 不建议使用的Suspend

C#多线程实践——线程同步

下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程完成                       锁系统 构成 目的 跨进程? 速度 lock 确保只有一个线程访问某个资源或某段代码. 否 快 Mutex 确保只有一个线程访问某个资源或某段代码.可被用于防止一个程序的多个实例同时运行. 是 中等 Semaphore 确保不超过指定数目的线程访问某个资源或某段代

C#核心语法

目录 1. 特殊的数据成员........................................................................... 1 2. 数组(array)............................................................................. 1 3. 命名空间(namespace).................................................

多重影分身——C#中多线程的使用(一)

首先明确几个概念: 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源. 而一个进程又是由多个线程所组成的. 一个程序通常只有一个进程(不包括exe调用exe的情况). 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数. 什么是多线程? 通俗的即使:多线程给人的感觉是同一时间做很多事情,其实从微观的角度来看,并不是同时,而是有效利用了CPU的空闲时间,