C#中的多线程问题,为啥带参数的方法不行,不带参数的可以?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的多线程问题,为啥带参数的方法不行,不带参数的可以?相关的知识,希望对你有一定的参考价值。

Thread t1 = new Thread(new ThreadStart(Show('hello')));

t1.Start();

private void Show(string str)

MessageBox.Show(str);


为什么这样不行,它说一定要用什么 方法 哦,是不是不能含有参数的函数啊?

好像下面就行哦:
Thread t1 = new Thread(new ThreadStart(Show()));
t1.Start();
private void Show()

MessageBox.Show(‘hello');

threadstart的参数是一个函数指针,这个指针是要传递个thread的一个内部函数执行的(那个函数才是真正意义的线程),你自己的函数只是传递给人家,人家调用进去,该函数指针的类型就是没有参数,没有返回值的,你的线程函数必须类型相同,指针类型不同肯定不行的。。。。 参考技术A c# 给线程传参数有很多方法,这里举个例子

比如传一个string 到线程里

Thread th=new Thread(the_work)
th.Start("要传进线程的串");

public void the_work(object o)

string s=(string)o;

//你线程里的工作
参考技术B 楼主,你要是想带参数可以用这个
ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveDate);
Thread threadReceive = new Thread(pts);
User user = new User(newClient);
threadReceive.Start(user);

看第一行,我这段代码的ReceiveDate方法就是有一个参数的,使用ParameterizedThreadStart这个创建线程可以带一个参数

以上是关于C#中的多线程问题,为啥带参数的方法不行,不带参数的可以?的主要内容,如果未能解决你的问题,请参考以下文章

C#和Java中的构造器constructor是啥?起啥作用?为啥不可以被override??

C# 线程管理:多线程创建方式

C# 线程管理:多线程创建方式

线程的启动(转)

C# 多线程,ThreadStart()里面的方法带了参数就提示错误?

C#多线程实现方法