当前位置:编程学习 > C#/ASP.NET >>

C#关于多线程控制控件,求大神指导

 delegate void AddMessageToListBoxDelegate(string str);
        public void  AddMessageToListbox(string str)
        {
            
            if (listBox1.InvokeRequired)
            {
                AddMessageToListBoxDelegate d = AddMessageToListbox;
                listBox1.Invoke(d, str);//三个参数为  委托实例  委托的参数

            }
            else
            {
                listBox1.Items.Add(str);
                listBox1.SelectedItem = listBox1.Items.Count - 1;
                listBox1.ClearSelected();
            }
        }


调试运行的时候,listbox1.item.add已经执行了,但是在界面上面,显示不了已经添加的信息,求哪位大神给看一下是什么原因 --------------------编程问答-------------------- 为什么要这样写呢?搞不懂.
直接这样不就行了:
   在构造函数里加个 Form.CheckForIllegalCrossThreadCalls = false;

 delegate void AddMessageToListBoxDelegate(string str);
   public void AddMessageToListbox(string str)
      {

            this.listbox1.items.add(str);
                  }
调用的时候:AddMessageToListBoxDelegate addtoList=new AddMessageToListBoxDelegate(AddMessageToListbox);
                                      addtoList(str,null,null);

            
--------------------编程问答-------------------- AddMessageToListBoxDelegate d = AddMessageToListbox;
listBox1.Invoke(d, str);//三个参数为 委托实例 委托的参数

改为

AddMessageToListBoxDelegate d = new AddMessageToListBoxDelegate (AddMessageToListbox);
this.Invoke(d, new object[] { value }); --------------------编程问答-------------------- 代码看上去没问题,完整的代码贴出来吧。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 3 楼  的回复:
代码看上去没问题,完整的代码贴出来吧。

+1 --------------------编程问答-------------------- 代码没问题,应该是你将AddMessageToListbox作为线程的执行方法了,导致UI线程卡死没有反应,看不出来Item增加的效果。
 private void button1_Click(object sender, EventArgs e)
    {
      ThreadPool.QueueUserWorkItem(Run, null);
    }
    private void Run(object pnull)
    {
      int i=0;
      while (true)
      {
        AddMessageToListbox("第" + i++ + "个");
        Thread.Sleep(2000);
      }

    }

    delegate void AddMessageToListBoxDelegate(string str);
    public void AddMessageToListbox(object str)
    {
      if (listBox1.InvokeRequired)
      {
        AddMessageToListBoxDelegate d = AddMessageToListbox;
        listBox1.Invoke(d, str);//三个参数为 委托实例 委托的参数
      }
      else
      {
        listBox1.Items.Add(str);
        listBox1.SelectedItem = listBox1.Items.Count - 1;
        listBox1.ClearSelected();
      }
    }

这段代码测试没有问题
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,