在C#中ParameterizedThreadStart和ThreadStart区别.doc

在C#中ParameterizedThreadStart和ThreadStart区别.doc

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

不需要传递参数,也不需要返回参数   我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下: ThreadStart threadStart=new ThreadStart(Calculate); Thread thread=new Thread(threadStart); thread.Start(); ? public void Calculate() ?? {  double Diameter=0.5;  Console.Write(The Area Of Circle with a Diameter of {0} is {1}Diameter,Diameter*Math.PI); }   上面我们用定义了一个ThreadStart类型的委托,这个委托制定了线程需要执行的方法: Calculate,在这个方法里计算了一个直径为0.5的圆的周长,并输出.这就构成了最简单的多线程的例子,在很多情况下这就够用了,然后 ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数,这显然是个很大的不足,为了弥补这个缺陷,聪明的程序员想出了许多好的方法,我们将在需要传递多个参数一节中进行介绍,这里我们先介绍.Net为了解决这个问题而设定的另外一个委托:就是ParameterizedThreadStart ,我会在下面详细讲述。   需要传递单个参数 ParameterThreadStart的定义为void ParameterizedThreadStart(object state)??使用这个这个委托定义的线程的启动函数可以接受一个输入参数,具体例子如下 ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Thread thread=new Thread() ; thread.Start(0.9); ? public void Calculate(object arg) { double Diameter=double(arg); Console.Write(The Area Of Circle with a Diameter of {0} is {1}Diameter,Diameter*Math.PI); }   Calculate方法有一个为object类型的参数,虽然只有一个参数,而且还是object类型的,使用的时候尚需要类型转换,但是好在可以有参数了,并且通过把多个参数组合到一个类中,然后把这个类的实例作为参数传递,就可以实现多个参数传递.比如: class AddParams { ??? public int a, b; ??? public AddParams(int numb1, int numb2) ??? { ????? a = numb1; ????? b = numb2; ??? } } #endregion class Program { ??? static void Main(string[] args) ??? { ????? Console.WriteLine(***** Adding with Thread objects *****); ????? Console.WriteLine(ID of thread in Main(): {0}, ??????? Thread.CurrentThread.ManagedThreadId); ????? AddParams ap = new AddParams(10, 10); ????? Thread t = new Thread(new ParameterizedThreadStart(Add)); ????? t.Start(ap); ????? Console.ReadLine(); ??? } ??? #region Add method ??? static void Add(object data) ??? { ????? if (data is AddParams) ????? { ??????? Console.WriteLine(ID of thread in Main(): {0}, ????????? Thread.CurrentThread.ManagedThreadId); ??????? AddParams ap = (AddParams)data; ??????? Console.WriteLine({0} + {1} is {2}, ????????? ap.a, ap.b, ap.a + ap.b); ????? } ??? } ??? #

文档评论(0)

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

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

1亿VIP精品文档

相关文档