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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于振发 中级黑马   /  2013-9-28 01:16  /  1301 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 于振发 于 2013-9-28 16:47 编辑

我第一次使用线程,有这么个问题:我再窗体上放了一个listBox1,创建了两个线程,我再线程中访问这个listBox1的时候,系统说不能跨线程调用控件,这怎么回事 ,怎么解决??
代码如下:
        private void Form1_Load(object sender, EventArgs e)
        {
            //创建线程 需要System.Threading命名空间
            Thread t1, t2; // 说明为窗体类成员
            t1 = new Thread(new ThreadStart(BackgroundProcess));
            t1.Start();    //启动线程t1
        }
        private void BackgroundProcess()
        {
            int i = 1;
            while (true)
            {
                // 向列表框增加一个项目
                listBox1.Items.Add("Iterations: " + i.ToString());

i++;
                Thread.Sleep(2000); // 指定线程休眠的时间
            }
           
        }

谢谢各位了

评分

参与人数 1技术分 +1 收起 理由
茹化肖 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
int i = 0;
private void Form1_Load(object sender, EventArgs e)
{
       //创建线程 需要System.Threading命名空间
       Thread t1, t2; // 说明为窗体类成员
       t1 = new Thread(new ThreadStart(BackgroundProcess));
       t1.Start();    //启动线程t1
}
/////////////////////////////////////////////////////////////////////////////////////////            
delegate void Del_Thread();//定义一个委托
///////////////////////////////////////////////////////////////////////////////////////
private void BackgroundProcess()
{
       while (true)
       {
              Function();
              Thread.Sleep(2000);
       }
}
///////////////////////////////////////////////////////////////////////////////////////////////
private void Function()
{
        if (this.listBox1.InvokeRequired)
        {
                Del_Thread del = new Del_Thread(BackgroundProcess);
                this.BeginInvoke(del);
        }
        else
        {
                i++;
                listBox1.Items.Add(i);
         }
}
回复 使用道具 举报
出错原因:线程的调用不能交叉
解决方法:
两种方法:
1.listbox.checkforillegalcrossthreadcalls=false;(不建议使用这种)
2.用委托的方法,楼上已经写了
回复 使用道具 举报
我试了下沙发的方法,感觉跳入死循环了,出不来。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马