Thread详细讲解.docx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Thread详细讲解

基础篇??怎样创建一个线程我只简单列举几种常用的方法,详细可参考.Net多线程总结(一)一)使用Thread类ThreadStart threadStart=new?ThreadStart(Calculate);//通过ThreadStart委托告诉子线程讲执行什么方法,这里执行一个计算圆周长的方法Thread thread=new?Thread(threadStart);thread.Start();?//启动新线程public?void?Calculate(){double?Diameter=0.5;Console.Write(The perimeter Of Circle with a Diameter of {0} is {1}Diameter,Diameter*Math.PI);}?二)使用Delegate.BeginInvokedelegate?double?CalculateMethod(double?Diameter);?//申明一个委托,表明需要在子线程上执行的方法的函数签名static?CalculateMethod calcMethod?=?new?CalculateMethod(Calculate);//把委托和具体的方法关联起来static?void?Main(string[] args){//此处开始异步执行,并且可以给出一个回调函数(如果不需要执行什么后续操作也可以不使用回调)calcMethod.BeginInvoke(5,?new?AsyncCallback(TaskFinished),?null);Console.ReadLine();}//线程调用的函数,给出直径作为参数,计算周长public?static?double?Calculate(double?Diameter){????return?Diameter?*?Math.PI;}//线程完成之后回调的函数public?static?void?TaskFinished(IAsyncResult result){????double?re?=?0;??? re?=?calcMethod.EndInvoke(result);??? Console.WriteLine(re);}三)使用ThreadPool.QueueworkItemWaitCallback w?=?new?WaitCallback(Calculate);//下面启动四个线程,计算四个直径下的圆周长ThreadPool.QueueUserWorkItem(w,?1.0);ThreadPool.QueueUserWorkItem(w,?2.0);ThreadPool.QueueUserWorkItem(w,?3.0);ThreadPool.QueueUserWorkItem(w,?4.0);public?static?void?Calculate(double?Diameter){return?Diameter?*?Math.PI;}?下面两条来自于/tonyman/archive/2007/09/13/891912.html? 受托管的线程与 Windows线程必须要了解,执行.NET应用的线程实际上仍然是Windows线程。但是,当某个线程被CLR所知时,我们将它称为受托管的线程。具体来说,由受托管的代码创建出来的线程就是受托管的线程。如果一个线程由非托管的代码所创建,那么它就是非托管的线程。不过,一旦该线程执行了受托管的代码它就变成了受托管的线程。一个受托管的线程和非托管的线程的区别在于,CLR将创建一个System.Threading.Thread类的实例来代表并操作前者。在内部实现中,CLR将一个包含了所有受托管线程的列表保存在一个叫做ThreadStore地方。CLR确保每一个受托管的线程在任意时刻都在一个AppDomain中执行,但是这并不代表一个线程将永远处在一个AppDomain中,它可以随着时间的推移转到其他的AppDomain中。从安全的角度来看,一个受托管的线程的主用户与底层的非托管线程中的Windows主用户是无关的。?? 前台线程与后台线程启动了多个线程的程序在关闭的时候却出现了问题,如果程序退出的时候不关闭线程,那么线程就会一直的存在,但是大多启动的线程都是局部变量,不能一一的关闭,如果调用Thread.CurrentThread.Abort()方法关闭主线程的话,就会出现ThreadAbortException 异常,因此这样不行。后来找到了这个办法: Thread.IsBackground 设置线程为后台线程。?msdn对前台线程和后台线程的解释:托管线程或者是后台线程,或者是前台线程。后台线程不会使托管执行环境处于活动状态,除此之外,后台线

文档评论(0)

yan698698 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档