创建线程

  

线程是使用Thread类来处理的,该类在System.Threading命名空间中。通过实例化一个Thread对象就可以创建一个线程。创建新的 Thread 对象时,将创建新的托管线程。Thread 类具有接受一个 ThreadStart 委托或 ParameterizedThreadStart 委托的构造函数,该委托包装了调用 Start 方法时由新线程调用的方法。代码如下:

Thread t = new Thread(new ThreadStart(TestMethord));
t.Start();

上述代码实例化了一个Thread 对象,并指明了将要调用的方法TestMethord,然后启动线程。ThreadStart委托中作为参数的方法不需要参数,并且没有返回值。ParameterizedThreadStart委托一个对象为参数,利用这个参数可以很方便的向线程传递参数。代码如下:

Thread th = new Thread(new ParameterizedThreadStart (TestMethord));
th.Start(99);

99’就是向方法传递的参数, ParameterizedThreadStart主要用来调用有参数的方法。

线程是通过线程类Thread来处理的,下面介绍Thread类的属性和方法。如表38.1所示。

1Thread类的属性

Thread类的属性如表表所示。

                               Thread类常用属性及说明

属性

说明

ApartmentState

获取或设置此线程的单元状态

CurrentContext

获取线程正在其中执行的当前上下文

CurrentCulture

获取或设置当前线程的区域性

CurrentPrincipal

获取或设置线程的当前负责人(对基于角色的安全性而言)

CurrentThread

获取当前正在运行的线程

CurrentUICulture

获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定的资源

ExecutionContext

获取一个 ExecutionContext 对象,该对象包含有关当前线程的各种上下文的信息

IsAlive

获取一个值,该值指示当前线程的执行状态

IsBackground

获取或设置一个值,该值指示某个线程是否为后台线程

IsThreadPoolThread

获取一个值,该值指示线程是否属于托管线程池

ManagedThreadId

获取当前托管线程的惟一标识符

Name

获取或设置线程的名称

Priority

获取或设置一个值,该值指示线程的调度优先级

ThreadState

获取一个值,该值包含当前线程的状态

下面对Thread类中比较重要的属性进行详细介绍。

1IsAlive属性:判断线程的状态:

获取一个值,该值指示当前线程的执行状态。

语法:

    public bool IsAlive { get; }

属性值:如果此线程已启动并且尚未正常终止或中止,则为 true;否则为 false

2Name属性

获取或设置线程的名称。

语法:

    public string Name { get; set; }

属性值:包含线程名称的字符串,或者如果未设置名称,则为空引用。

3ThreadState 属性

获取一个值,该值包含当前线程的状态。

语法:

    public ThreadState ThreadState { get; }

属性值:ThreadState 值之一,它指示当前线程的状态。初始值为 Unstarted

2Thread类的方法

Thread类的方法如下表所示。

                               Thread类常用方法及说明

方法

说明

Abort

在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程

AllocateDataSlot

在所有的线程上分配未命名的数据槽

AllocateNamedDataSlot

在所有线程上分配已命名的数据槽

BeginCriticalRegion

通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未处理的异常的影响可能会危害应用程序域中的其他任务

BeginThreadAffinity

通知宿主托管代码将要执行依赖于当前物理操作系统线程的标识的指令

EndCriticalRegion

通知宿主执行将要进入一个代码区域,在该代码区域内线程中止或未处理的异常仅影响当前任务

EndThreadAffinity

通知宿主托管代码已执行完依赖于当前物理操作系统线程的标识的指令

Equals 

确定两个 Object 实例是否相等

FreeNamedDataSlot

为进程中的所有线程消除名称与槽之间的关联

GetApartmentState

返回一个 ApartmentState 值,该值指示单元状态

GetCompressedStack

返回一个 CompressedStack 对象,该对象可用于捕获当前线程的堆栈

GetData

在当前线程的当前域中从当前线程上指定的槽中检索值

GetDomain

返回当前线程正在其中运行的当前域

GetDomainID

返回惟一的应用程序域标识符

GetHashCode

返回当前线程的哈希代码

GetNamedDataSlot

查找已命名的数据槽

GetType 

获取当前实例的 Type

Interrupt

中断处于 WaitSleepJoin 线程状态的线程

Join

阻止调用线程,直到某个线程终止时为止

MemoryBarrier

同步内存。其效果是将缓存内存中的内容刷新到主内存中,从而使处理器能执行当前线程

ReferenceEquals 

确定指定的 Object 实例是否是相同的实例

ResetAbort

取消为当前线程请求的 Abort

Resume

继续已挂起的线程

SetApartmentState

在线程启动前设置其单元状态

SetCompressedStack

对当前线程应用捕获的 CompressedStack

SetData

在当前正在运行的线程上为此线程的当前域在指定槽中设置数据

Sleep

将当前线程阻止指定的毫秒数

SpinWait

导致线程等待由 iterations 参数定义的时间量

Start

使线程被安排进行执行

Suspend

挂起线程,或者如果线程已挂起,则不起作用

ToString 

返回表示当前 Object String

TrySetApartmentState

在线程启动前设置其单元状态

VolatileRead

读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值

VolatileWrite

立即向字段写入一个值,以使该值对计算机中的所有处理器都可见

下面对Thread类中比较重要的方法进行详细介绍。

1Abort()方法

在调用此方法的线程上引发 ThreadAbortException,以开始终止此线程的过程。调用此方法通常会终止线程。

语法:

    public void Abort ()

通常在关闭线程时调用该方法。

2Jion ()方法

在继续执行标准的 COM SendMessage 消息泵处理期间,阻止调用线程,直到某个线程终止为止。

语法:

    public void Join ()

使用此方法确保线程已终止。如果线程不终止,则调用方将无限期阻止。

3Sleep ()方法

将当前线程挂起指定的时间。

语法:

public static void Sleep (int millisecondsTimeout)

参数millisecondsTimeout 是指线程被阻止的毫秒数。指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。指定 Infinite 以无限期阻止线程。

4Start()方法

使线程被安排进行执行。

语法:

    public void Start ()

此方法通常用来启动一个线程,但线程一旦终止,它就无法通过再次调用 Start 来重新启动。

不进则退、与时俱进
原文地址:https://www.cnblogs.com/wenrenhua08/p/3993660.html