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的一个内部函数执行的(那个函数才是真正意义的线程),你自己的函数只是传递给人家,人家调用进去,该函数指针的类型就是没有参数,没有返回值的,你的线程函数必须类型相同,指针类型不同肯定不行的。。。。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-24
c# 给线程传参数有很多方法,这里举个例子

比如传一个string 到线程里

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

public void the_work(object o)
{
string s=(string)o;

//你线程里的工作
}
第2个回答  2013-01-24
楼主,你要是想带参数可以用这个
ParameterizedThreadStart pts = new ParameterizedThreadStart(ReceiveDate);
Thread threadReceive = new Thread(pts);
User user = new User(newClient);
threadReceive.Start(user);

看第一行,我这段代码的ReceiveDate方法就是有一个参数的,使用ParameterizedThreadStart这个创建线程可以带一个参数本回答被网友采纳

c# 多线程的小问题
线程本身由于创建和切换的开销,采用多线程不会提高程序的执行速度,反而会降低速度,但是对于频繁IO操作的程序,多线程可以有效的并发。对于包含不同任务的程序,可以考虑每个任务使用一个线程。这样的程序在设计上相对于单线程做所有事的程序来说,更为清晰明了,比如生产、消费者问题。在实际的开发中对于...

C# 多线程数据混乱的问题
多线程操作中,各个线程如果是同时运行的话,他们的执行先后顺序是不确定的,多线程就这样,即使它偶然出现了跟你预期的顺序一样,那也只是巧合罢了 而且你多线程里有都是用了textBox1这个资源,他们会抢用,按理说你应该在各个线程中先把这个资源锁住,用完了以后再释放 ...

...也不抛异常。连try也不进。比如在线程里面执行webclit 或者点用_百 ...
多线程调试问题多多,也不容易调试,建议加日志输出重要参数或用catch捕获异常来调试代码。用log4net输出日志就是个不错的选择

C#网络编程与多线程的疑问,求指点
1、这种情况下,多线程当然是要把最占用时间的步骤,以及循环的部分,放到线程里。2、其他线程的代码无法直接操作UI线程里的控件。需要使用委托。你具体的需求我不是很清楚。但是我在这里假设一个例子:比如我有个买票的程序,必须每隔2秒,去服务器请求门票的剩余数量。显示在界面上。界面上还有诸如“售...

C#多线程 如何锁定静态类中静态方法的参数?
调用方法前用 System.Threading.Semophore 加线程锁,调用结束后释放。

C#多线程问题:线程间操作无效: 从不是创建控件“label4”的线程访问...
一楼正解 你是写在GuidProc这个类里面的,这个是不行的.必须写在Form的类中或者子类中.就是说:this.Invoke中的this必须指的是一个窗体对象.补充:原因:声明的委托需要参数.private delegate void SetTextDelegate(string value);解决:修改代码.if (this.InvokeRequired){ SetLabelText d = new Set...

c#编写了一个多线程程序但是出现40个线程同时运行就自动关闭程序但如果...
楼上正解,不过也可以自己写个线程池来管理和调度你的线程,你这种情况就是一下子运行太多线程的过,可以让线程以队列的形式一个一个执行,并发最好不要太多,CLR有线程管理和控制机制的,不能无限制的并发线程。

c# 创建多线程失败
因为UI控件操作不是线程安全的 如果要通过线程更改UI,需要使用invoke来做 1.在Form里写一个更改UI的函数 2.声明一个代理,这个代理可以代理这个更改UI的函数 3.函数内部 if(this.label4.invokerequied)\/\/判断是否需要invoke操作 { \/\/实例化此函数自身的代理 \/\/如果此函数有参数,需要创建一个数组,...

c# 多线程同时写数据表速度变慢的问题
一般涉及网络、磁盘读写的程序采用多线程,计算过程使用多线程尚不划算。高性能并行计算使用c#不行。如果计算量大建议使用编译性语言(推荐使用FORTURN)。 .net属于半编译性平台,效率较低。

c#传递引用对象作为参数的时候就没有必要用ref关键字,对吗
不添加ref关键字时,作为方法参数的形参与实际传入的实参实际上是两个对象,在栈中有两个地方分别保存它们的名字,假设形参叫A,实参叫B。只是引用对象保存的本来就是地址,所以这两个对象的值“恰好”指向堆中的同一个地方,假设这个地方叫C,对这两个对象的值进行修改实际上是修改C,所以都会影响到...

相似回答