A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© songFeng4985 中级黑马   /  2012-12-5 16:20  /  1175 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public void run(string name,string id)
{
}

起一条线程,  Thread thread=new Thread(run);
现在问题出来了, 我的 run 里面的参数如何传进去哦?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

4 个回复

倒序浏览
这个run方法不应该是重写thread中的run方法吗?可是那个run方法是没有参数的

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
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);
            }
        }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
线程可以传入的委托的有两种类型,一种是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" });
        }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
run可以是一个委托类型的方法。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马