.NET多线程编程(6)——如何操纵一个线程

  下面咱们就动手来建立个线程使用Thread类建立线程时只需提供线程入口便可(线程入口使知道该让这个线程干什么事)   在C#中线程入口是经过ThreadStart代理(delegate)来提供你能够把ThreadStart理解为个指针指向线程要执行当Thread.Start思路方法后线程就开始执行ThreadStart所表明或者说指向   打开你VS.net新建个控制台应用(Console Application)编写彻底控制个线程代码举例: //ThreadTest.cs using; using.Threading; ThreadTest {   publicAlpha   {       publicvoidBeta       {         while(true)         {           Console.WriteLine("Alpha.Betaisrunninginitsownthread.");         }       }   };   publicSimple   {       publicMain       {         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)对象当咱们建立线程oThreadoThread.Start思路方法启动时实际上运行是 Alpha.Beta思路方法:   Alpha oAlpha = Alpha;   Thread oThread = Thread( ThreadStart(oAlpha.Beta));   oThread.Start;   而后在Mainwhile循环中咱们使用静态思路方法Thread.Sleep让主线程停了1ms这段时间CPU转向执行线 程oThread而后咱们试图用Thread.Abort思路方法终止线程oThread注意后面oThread.JoinThread.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个区别优先级由高 到低分别是HighestAboveNormalNormalBelowNormalLowest在建立线程时若是不指定优先级那么系统默 认为ThreadPriority.Normal   给个线程指定优先级咱们可使用以下代码:   //设定优先级为最低   myThread.Priority=ThreadPriority.Lowest;   经过设定线程优先级咱们能够安排些相对重要线程优先执行例如对用户响应等等
相关文章
相关标签/搜索