- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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);????? }??? }??? #
您可能关注的文档
- ICH分类与目录.doc
- java多线程试题_答案.doc
- JSTAMP_NV 基本模块注释2011-10-8.doc
- js中的preventDefault和stopPropagation.doc
- IWorkspaceEdit接口.doc
- lampp安装运行方法.docx
- keytools使用.docx
- LINUX下用户磁盘空间限制(Ext3).doc
- Matlab中Kmeans函数的使用.docx
- modbus移植说明.docx
- 大学生职业规划大赛《新闻学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《应用统计学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《中医学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《信息管理与信息系统专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《汽车服务工程专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《水产养殖学专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《市场营销专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐表演专业》生涯发展展示PPT.pptx
- 大学生职业规划大赛《音乐学专业》生涯发展展示PPT.pptx
文档评论(0)