下面我们就动手来创建

个线程

使用Thread类创建线程时

只需提供线程入口即可

(线程入口使

知道该让这个线程干什么事)
在C#中

线程入口是通过ThreadStart代理(delegate)来提供


你可以把ThreadStart理解为

个

指针

指向线程要执行



当

Thread.Start

思路方法后

线程就开始执行ThreadStart所代表或者说指向



打开你

VS.net

新建

个控制台应用

(Console Application)

编写完全控制

个线程

代码举例:
//ThreadTest.cs
using
;
using
.Threading;
ThreadTest
{
public
Alpha
{
publicvoidBeta
{
while(true)
{
Console.WriteLine("Alpha.Betaisrunninginitsownthread.");
}
}
};
public
Simple
{
public
Main
{
Console.WriteLine("ThreadStart/Stop/JoinSample");
AlphaoAlpha=
Alpha
;
file://这里创建
个线程
使的执行Alpha类
Beta
思路方法
ThreadoThread=
Thread(
ThreadStart(oAlpha.Beta));
oThread.Start
;
while(!oThread.IsAlive)
Thread.Sleep(1);
oThread.Abort
;
oThread.Join
;
Console.WriteLine
;
Console.WriteLine("Alpha.Betahasfinished");
try
{
Console.WriteLine("TrytorestarttheAlpha.Betathread");
oThread.Start
;
}
catch(ThreadStateException)
{
Console.Write("ThreadStateExceptiontryingtorestartAlpha.Beta.");
Console.WriteLine("Expectedsinceabortedthreadscannotberestarted.");
Console.ReadLine
;
}
0;
}
}
}
这段

包含两个类Alpha和Simple

在创建线程oThread时我们用指向Alpha.Beta

思路方法


化了ThreadStart代理(delegate)对象

当我们创建

线程oThread

oThread.Start

思路方法启动时

实际上

运行

是Alpha.Beta

思路方法:
Alpha oAlpha =

Alpha

;
Thread oThread =

Thread(

ThreadStart(oAlpha.Beta));
oThread.Start

;
然后在Main



while循环中

我们使用静态思路方法Thread.Sleep

让主线程停了1ms

这段时间CPU转向执行线程oThread

然后我们试图用Thread.Abort

思路方法终止线程oThread

注意后面

oThread.Join


Thread.Join

思路方法使主线程等待

直到oThread线程结束

你可以给Thread.Join

思路方法指定

个

型

参数作为等待

最长时间

的后

我们试图用Thread.Start

思路方法重新启动线程oThread

但是显然Abort

思路方法带来

后果是不可恢复

终止线程

所以最后

会抛出ThreadStateException异常

主线程Main


所有线程都是依附于Main


所在

线程


Main


是C#


入口

起始线程可以称的为主线程

如果所有

前台线程都停止了

那么主线程可以终止

而所有

后台线程都将无条件终止

所有

线程虽然在微观上是串行执行


但是在宏观上你完全可以认为它们在并行执行

Thread.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

思路方法来彻底终止进程

线程

优先级
当线程的间争夺CPU时间时

CPU 是按照线程

优先级给予服务


在C#应用

中

用户可以设定5个区别

优先级

由高到低分别是Highest

AboveNormal

Normal

BelowNormal

Lowest

在创建线程时如果不指定优先级

那么系统默认为ThreadPriority.Normal

给

个线程指定优先级

我们可以使用如下代码:
//设定优先级为最低
myThread.Priority=ThreadPriority.Lowest;
通过设定线程

优先级

我们可以安排

些相对重要

线程优先执行

例如对用户

响应等等