日期:2014-05-20  浏览次数:20682 次

请教Thread问题
using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Text;
using   System.Windows.Forms;
using   System.Threading;

namespace   _1
{
        public   partial   class   Form1   :   Form
        {
                public   Form1()
                {
                        InitializeComponent();
                        x();
                }
                int   a=0;
                public   void   B()
                {
                        a++;
                        listBox1.Items.Add(a);
                        Thread.Sleep(1000);
                }

              public   void   x()
                {
                        Thread   t   =   new   Thread(new   ThreadStart(B));
                        t.IsBackground   =   true;
                        t.Start();
                }
        }
}

运行后
1

Thread.Sleep(1000)不应该是1秒运行一次么?为什么只显示一个1呢?

------解决方案--------------------
加了for才能循环,你的线程就执行了一次 B()

最好建立一个委托,在委托中通过for让B()执行多次,输出多个数字
------解决方案--------------------
public void demo()
{
MethodInvoker me = new MethodInvoker(B);
for (int i = 0; i < 20; i++)
{
this.BeginInvoke(me);
Thread.Sleep(1000);
}
}

int a=0;
public void B()
{
a++;
listBox1.Items.Add(a);
}

public void x()
{
Thread t = new Thread(new ThreadStart(demo));
t.IsBackground = true;
t.Start();
}


//改成这样子,你再试试,这个是执行20次的
//你的代码在vs05中无法通过,子线程操控了UI线程创建的控件,vs03可以通过