线程Thread传递一个或多个参数问题
来源:互联网 发布:centos安装armlinuxgcc 编辑:程序博客网 时间:2024/06/06 03:19
线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提供给我们四个重载的构造函数(以下引自msdn)。
Thread (ParameterizedThreadStart) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。
Thread (ThreadStart) 初始化 Thread 类的新实例。
由 .NET Compact Framework 支持。
Thread (ParameterizedThreadStart, Int32) 初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。
Thread (ThreadStart, Int32) 初始化 Thread 类的新实例,指定线程的最大堆栈大小。
由 .NET Compact Framework 支持。
我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。
一、不带参数的
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace AAAAAA { class AAA { public static void Main() { Thread t = new Thread(new ThreadStart(A)); t.Start(); Console.Read(); } private static void A() { Console.WriteLine("Method A!"); } } }
结果显示Method A!
二、带一个参数的
由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace AAAAAA { class AAA { public static void Main() { Thread t = new Thread(new ParameterizedThreadStart(B)); t.Start("B"); Console.Read(); } private static void B(object obj) { Console.WriteLine("Method {0}!",obj.ToString ()); } } }
结果显示Method B!
主要是这句中
Thread t = new Thread(new ParameterizedThreadStart(B));
用ParameterizedThreadStart 而不是threadStart。
三、带多个参数的
由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace AAAAAA { class AAA { public static void Main() { My m = new My(); m.x = 2; m.y = 3; Thread t = new Thread(new ThreadStart(m.C)); t.Start(); Console.Read(); } } class My { public int x, y; public void C() { Console.WriteLine("x={0},y={1}", this.x, this.y); } } }
结果显示x=2,y=3
也可以使用想第二种方法那样,把要传过去的多个参数写到一个类里面,直接实例化类传过去就可以了。
具体就是先把要传过去的类
如上面的类my,object pama=(bject)my; 强制转化成object以后用Thread t = new Thread(new ParameterizedThreadStart(B));
t.start(pama); 传进去在B方法中再转化回来就可以了。
四、利用结构体给参数传值。
定义公用的public struct,里面可以定义自己需要的参数,然后在需要添加线程的时候,可以定义结构体的实例。
//结构体 struct RowCol { public int row; public int col; }; //定义方法 public void Output(Object rc) { RowCol rowCol = (RowCol)rc; for (int i = 0; i < rowCol.row; i++) { for (int j = 0; j < rowCol.col; j++) Console.Write("{0} ", _char); Console.Write("\n"); } }
- 线程Thread传递一个或多个参数问题
- 创建多个线程的参数传递问题
- mybatis传参问题,一个或多个参数
- C++线程传递多个参数demo
- C# Thread 传递多参数
- struts2多个参数传递问题
- mybatis传递多个参数的问题
- mybatis 传递一个参数,多个参数的应用
- 专门的线程类,多个参数的传递
- 用线程类来实现传递多个参数
- VC中线程函数如何传递多个参数
- C++ 在线程里面传递多个参数
- 如何向线程函数传递多个参数?
- MFC中线程传递多个参数的方法
- 学习pthreads,给线程传递多个参数
- 如何向线程函数传递多个参数?
- 向线程传递多个参数的变通方法(c#)
- setTimeout传参数 传递多个参数的问题
- 日本人的友好
- js 获取url参数方法
- lucence 3.0.3 +Struts 搜索 数据库内容
- POI实战-java开发excel详解(第二章 单元格各类型数据读取)
- Openlayers展现点元素
- 线程Thread传递一个或多个参数问题
- 字符串提取数字
- 关于getResource("/")的读取路径问题
- 北京灿烂的历史文化
- js关于时间日期的一些方法汇总
- c++测试下载速度
- Oracle 的 bulk collect用法(批量查询)
- Oracle 10gR2 RAC+ASM 归档设置示例
- webkit动画-变换与恢复