C#中的多线程函数是不允许有参数的,
如果要实现参数传递,你可以通过类内的其它属性或域的方式把参数传递进要执行的函数体内
注意,不要忘记使用lock函数,
线程调用的类的方法不能有返回值和参数。你通过定义新类并设置该类的属性或字段值把参数传入。如果要调用控件等,可以在构造函数里传入。
你可以把新开的线程封装到一个类中,如:
public class subClass
{
int a;
public subClass(int intTemp)
{
this.a = intTemp;
}
public void Thread1()
{
//code
}
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
subClass a = new subClass(10);//参数10
Thread t = new Thread(new ThreadStart(a.Thread1));
t.Start();
}
.NET Framework 2.0里有个新的ParameterizedThreadStart委托,可以用来传一个object的参数
下面是摘自MSDN里的例子,我个人还是喜欢用类的老方法
using System;
using System.Threading;
public class Work
{
public static void Main()
{
// To start a thread using a shared thread procedure, use
// the class name and method name when you create the
// ParameterizedThreadStart delegate.
//
Thread newThread = new Thread(
new ParameterizedThreadStart(Work.DoWork));
// Use the overload of the Start method that has a
// parameter of type Object. You can create an object that
// contains several pieces of data, or you can pass any
// reference type or value type. The following code passes
// the integer value 42.
//
newThread.Start(42);
// To start a thread using an instance method for the thread
// procedure, use the instance variable and method name when
// you create the ParameterizedThreadStart delegate.
//
Work w = new Work();
newThread = new Thread(
new ParameterizedThreadStart(w.DoMoreWork));
// Pass an object containing data for the thread.
//
newThread.Start("The answer.");
}
public static void DoWork(object data)
{
Console.WriteLine("Static thread procedure. Data='{0}'",
data);
}
public void DoMoreWork(object data)
{
Console.WriteLine("Instance thread procedure. Data='{0}'",
data);
}
}
/* This code example produces the following output (the order
of the lines might vary):
Static thread procedure. Data='42'
Instance thread procedure. Data='The answer'
*/