新建线程是用的funcname只能是不带参数的代理。不过可以用间接的方法传递参数。 我用过的一种方法是:定义一个对象,这个对象有一个方法是要用来建立线程的func,有若干的属性是要传给func的参数。 建立线程时先建立这个对象,把参数传递给对象属性,在建立运行func的线程。 如: 1.定义一个类 ProcessMessage是用来建立线程的那个function message是要象ProcessMessage传递的参数 public class Processer { private Message message;
public Processer(Message m) { message = new Message(); message = m; } public void ProcessMessage() { //在这里写对message进行处理的code } }2.建立线程: Processer processer = new SWLogProcesser(m); Thread processThread = new Thread(new ThreadStart (processer.ProcessMessage)); processThread.Start();
我用过的一种方法是:定义一个对象,这个对象有一个方法是要用来建立线程的func,有若干的属性是要传给func的参数。
建立线程时先建立这个对象,把参数传递给对象属性,在建立运行func的线程。
如:
1.定义一个类
ProcessMessage是用来建立线程的那个function
message是要象ProcessMessage传递的参数
public class Processer
{
private Message message;
public Processer(Message m)
{
message = new Message();
message = m;
} public void ProcessMessage()
{
//在这里写对message进行处理的code
}
}2.建立线程:
Processer processer = new SWLogProcesser(m);
Thread processThread = new Thread(new ThreadStart (processer.ProcessMessage));
processThread.Start();
也可以用线程池.
比如如下。
for (int i=UD1;i<=UD2;i++)//全部扫完后停止
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Scan),i); //带参传送给线程函数
Application.DoEvents ();
} 就把参数i,传送给线程函数Scan了。