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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一、多线程线程的内部结构的模拟
        在这里主要模拟了线程执行不带参数的方法和执行不带参数的方法两种。
        模拟代码如下:
    //-------------执行不带参数的方法-----------
        ThreadStart threads;
        public MyThread(ThreadStart ts)//要求  用户在new的时候传入方法委托
        {
            this.threads = ts;//将委托 赋给全局变量
        }
        public void Start()
        {
            if (threads != null)
                threads();//调用 委托,执行委托里的方法
            else
                pts(null);
        }
        //-------------执行带参数的方法-----------
        ParameterizedThreadStart pts;
        public MyThread(ParameterizedThreadStart pts)//要求  用户在new的时候传入方法委托
        {
            this.pts = pts;//将委托 赋给全局变量
        }
        public void Start(object o)
        {
            pts(o);//调用 委托,执行委托里的方法
        }
二、多线程执行带参数的方法
        在线程执行带参数的方法是要判断参数是否为null。
        代码如下:
void SaiNi(object name)
        {
            if (name != null)//判断 是否传入参数
                MessageBox.Show("您好--" + name);
            else
                MessageBox.Show("null");
        }
        private void btnThreadParatton_Click(object sender, EventArgs e)
        {
            //创建线程
            Thread threadFrist = new Thread(ChangTxt);
            threadFrist.IsBackground = true;//把线程设置为后台线程
            threadFrist.Start(txtNameN.Text.ToString().Trim());//开启线程 传入参数
        }

三、多线程执行带多个参数的方法
        当线程执行带多个参数的方法时,在这里传入的是一个泛型集合。
        代码如下:
        //----------------------执行带多个参数的方法---------
        void SaiNi(object name)
        {
            List<string> lst = name as List<string>;
            if (lst != null)//判断 是否传入参数
            {
                foreach (string s in lst)
                {
                    MessageBox.Show("您好---"+s);
                }
            }
            else
                MessageBox.Show("null");
        }
        private void btnThreadParatton1_Click(object sender, EventArgs e)
        {
            //创建线程
            Thread threadFrist = new Thread(ChangTxt);
            threadFrist.IsBackground = true;//把线程设置为后台线程
            threadFrist.Start(new List<string> { "赵雅芝","张国荣","张曼玉"});//开启线程 传入参数
        }



评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

1 个回复

正序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马