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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吕振 中级黑马   /  2013-3-7 00:20  /  1551 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的代码是创建一个多线程的例子,启动程序在for循环中动态创建多条线程可是为啥没有创建成功呢??只显示一个线程在运行showNum方法....
private void button1_Click(object sender, EventArgs e)
        {
            createThread();
        }

        void createThread()
        {
            for (int i = 0; i < 30; i++)
            {
                Thread th = new Thread(new ThreadStart(showNum));
                th.IsBackground = true;
                th.Start();
                //label1.Text = "启动了" + i + "个线程对象!";
            }
        }

        void showNum()
        {
            DateTime start = DateTime.Now;

            for (int i = 0; i < 9999; i++)
            {
                textBox1.Text = i.ToString();
                Thread.Sleep(100);
            }

            DateTime end = DateTime.Now;

            TimeSpan span = end - start;

            MessageBox.Show(span.Seconds.ToString());
        }

评分

参与人数 1技术分 +1 收起 理由
张文 + 1 加分给力吗

查看全部评分

1 个回复

倒序浏览

RE: 多线程问题

将ShowNum的方法修改一下,这样可以看到正在运行的线程的唯一标示,再将它正在执行的 i  打印出来,就可以看到启动了多少了线程,每个线程运行到哪里了。
  void createThread()
        {
//启动几个线程就可以看到结果了,不需要那么多
            for (int i = 0; i < 5; i++)
            {
                Thread th = new Thread(new ThreadStart(showNum));
                th.IsBackground = true;
                th.Name = "线程"+i;
                th.Start();   
          }
        }     
   void showNum()
        {
            for (int i = 1; i <= 5;i++ )
            {
                //ManagedThreadId:获取当前托管线程的唯一标识符
                Console.WriteLine("当前的线程的ManagedThreadId:{0},执行到{1}次", Thread.CurrentThread.ManagedThreadId, i);
                Thread.Sleep(100);
            }
        }

结果:
当前的线程的ManagedThreadId:10,执行到1次
当前的线程的ManagedThreadId:11,执行到1次
当前的线程的ManagedThreadId:12,执行到1次
当前的线程的ManagedThreadId:14,执行到1次
当前的线程的ManagedThreadId:13,执行到1次
当前的线程的ManagedThreadId:10,执行到2次
当前的线程的ManagedThreadId:11,执行到2次
当前的线程的ManagedThreadId:12,执行到2次
当前的线程的ManagedThreadId:13,执行到2次
当前的线程的ManagedThreadId:14,执行到2次
当前的线程的ManagedThreadId:11,执行到3次
当前的线程的ManagedThreadId:10,执行到3次
当前的线程的ManagedThreadId:12,执行到3次
当前的线程的ManagedThreadId:14,执行到3次
当前的线程的ManagedThreadId:13,执行到3次
当前的线程的ManagedThreadId:11,执行到4次
当前的线程的ManagedThreadId:10,执行到4次
当前的线程的ManagedThreadId:12,执行到4次
当前的线程的ManagedThreadId:13,执行到4次
当前的线程的ManagedThreadId:14,执行到4次
当前的线程的ManagedThreadId:10,执行到5次
当前的线程的ManagedThreadId:11,执行到5次
当前的线程的ManagedThreadId:12,执行到5次
线程 '线程1' (0x53c) 已退出,返回值为 0 (0x0)。
线程 '线程0' (0x14d8) 已退出,返回值为 0 (0x0)。
线程 '线程2' (0x15ac) 已退出,返回值为 0 (0x0)。
线程 '线程4' (0x131c) 已退出,返回值为 0 (0x0)。
线程 '线程3' (0x15a8) 已退出,返回值为 0 (0x0)。
当前的线程的ManagedThreadId:13,执行到5次
当前的线程的ManagedThreadId:14,执行到5次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马