多线程的问题,带参数

特别安静 2009-10-05 06:16:42
我有一个方法,是带有参数的,我想用多线程,但是多线程只能用方法名字,不能用参数,哪位老大能告诉我怎么使多线程可以带参数啊?
...全文
333 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
呵呵,刚刚直接回帖,没有仔细看上面的回复。其实已经有人说出第一种方法了。那是很古老的方法。

实际上传递参数还能举出1、2种有效而清晰的方法。

不过我现在基本上只用匿名方法这一种写法。匿名方法很方便,省得一本正经地去定义class了。不知道随着.net升级到4.0,c#又会多少新的好工具出现啊。
  • 打赏
  • 举报
回复
sorry! private void Show() 中的private应该写为public,请修改过来再测试!

另外,实际上我觉得这种方法还是很麻烦,我直接在线程处写匿名方法,例如:

var y=2;
new Thread(() =>
{
Console.WriteLine("张三");
var x = 1;
Console.WriteLine(x + y); //这里直接引用外边的变量
}).Start();


这样更爽。
  • 打赏
  • 举报
回复
办法确实很多很多。

最普通的一种(但是不同于那个只有一个object参数的方法),你可以把方法包装一下成为一个对象,这样就可以为方法自定义许多自己觉得清晰的强类型属性。

例如我拿#2楼的Show代码做例子,假设我们需要为Show方法传递三个参数:用户名、用户地址、用户存款,我们就可以写:

public class ShowThread
{
public string 用户名{get;set;}
public string 用户地址{get;set;}
public decimal 用户存款{get;set;}

private void Show()
{
Console.WriteLine(this.用户名);
}
}

而调用方就可以写:

var p1 = new ShowThread { 用户名 = "s1", 用户存款 = 100 };
new Thread(p1.Show).Start();
var p2 = new ShowThread { 用户名 = "张三", 用户存款 = 800 };
new Thread(p2.Show).Start();
Console.ReadKey();


多运行几遍试试看,你会看到打印两个用户名的代码执行次序是随机的。
BATTLERxANGE 2009-10-05
  • 打赏
  • 举报
回复
办法很多,其实线程也能传递参数的!但是只能传一个object,所以你可以把你的参数封装到一个结构里面然后传递过去,线程方法再把它转回到结构类型
或者通过构造函数先传递好参数,然后在启动线程方法
ctwei86 2009-10-05
  • 打赏
  • 举报
回复

class Program
{
static void Main(string[] args)
{
ParameterizedThreadStart pts = new ParameterizedThreadStart(Show);
Thread t = new Thread(pts);
t.Start("Hello!How are you!");

}

private static void Show(object a)
{
while (true)
{
Console.WriteLine(a);
}
}
}

创建一个线程的时候需要给一个委托或者方法名,其中有一个是可以带参数的委托。
这样创建之后在启动的时候需要传递一个object的参数,具体使用如上面的代码。
可能你要问那我要想传两个参数怎么办呢?很容易,因为传的object类型,那么我们可以定义一个类,这个类里面定义我们要传的参数就可以了,这也体现了C#和Java的一大优势,就是封装。
tuoshi 2009-10-05
  • 打赏
  • 举报
回复
把方法封装在类里。
通过类的实例化传入参数。

定义线程时用类名.方法名

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧