线程可以传入的委托的有两种类型,一种是ThreadStart,另一种是ParameterizedThreadStart。ThreadStart是不带参数的委托。当需要让线程实现带参数的方法时就需要用到ParameterizedThreadStart委托。它的声明形式为:
public delegate void ParameterizedThreadStart(object obj)
也就是它接受方法的参数必须是object类型。当需要传递多个参数时,可以用数组或集合转换成object类型传递。
启动线程时使用的是线程带参数的Start(object parameter)方法,传递的依然是object类型数据。
附上代码一段:
//执行带一个参数的方法,参数类型为object
public void ShowTxtName1(object name)
{
MessageBox.Show(string.Format("姓名:{0}", name));
}
//执行带多个参数的方法,因为参数类型为object,可以"做手脚"传入多个参数
public void ShowTxtName2(object name)
{
List<string> list = name as List<string>;
if (list != null)
{
foreach(string s in list)
MessageBox.Show(string.Format("姓名:{0}", s));
}
}
private void button1_Click(object sender, EventArgs e)
{
//执行单个参数的方法
Thread thread1 = new Thread(ShowTxtName1);
thread1.IsBackground = true; //设置为后台线程
//调用线程带参数的启动方法,
//注意:因为该方法的传人参数是object,所以要求传给线程的方法的参数也为object
//如ShowTxtName(object name)的传入参数为object
thread1.Start(textBox1.Text);
//执行多个参数的方法
Thread thread2 = new Thread(ShowTxtName2);
thread2.IsBackground = true;
thread2.Start(new List<string>() { "tom", "jim", "lily" });
} |