黑马程序员技术交流社区

标题: 如何传参? [打印本页]

作者: songFeng4985    时间: 2012-12-5 16:20
标题: 如何传参?
public void run(string name,string id)
{
}

起一条线程,  Thread thread=new Thread(run);
现在问题出来了, 我的 run 里面的参数如何传进去哦?
作者: 坚持远方    时间: 2012-12-5 16:27
这个run方法不应该是重写thread中的run方法吗?可是那个run方法是没有参数的
作者: 陈辉    时间: 2012-12-5 17:47
1、若是一个参数可以通过线程的Start带参数的那个方法传递,若是多于一个参数,可以先将参数加入到集合中,在将这个集合通过线程的Start带参数的那个方法传递。
2、例子:
//多参
        private void button1_Click(object sender, EventArgs e)
        {
            //将传递给线程的多个参数加入到集合中
            List<string> list = new List<string>();
            list.Add("tom");
            list.Add("1");

            Thread thread = new Thread(Run);
            thread.IsBackground = true;
            thread.Start(list);
        }

        public void Run(object li)
        {
            List<string> list = li as List<string>;
            foreach (string s in list)
            {
                MessageBox.Show(s);
            }
        }
作者: 刘亚龙    时间: 2012-12-5 21:28
线程可以传入的委托的有两种类型,一种是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" });
        }
作者: 邓艳秋    时间: 2012-12-6 22:34
run可以是一个委托类型的方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2