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已经执行了,但是在界面上面,显示不了已经添加的信息,求哪位大神给看一下是什么原因

解决方案 »

  1.   

    为什么要这样写呢?搞不懂.
    直接这样不就行了:
       在构造函数里加个 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);            
      

  2.   

    AddMessageToListBoxDelegate d = AddMessageToListbox;
    listBox1.Invoke(d, str);//三个参数为 委托实例 委托的参数改为AddMessageToListBoxDelegate d = new AddMessageToListBoxDelegate (AddMessageToListbox);
    this.Invoke(d, new object[] { value });
      

  3.   

    代码没问题,应该是你将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();
          }
        }
    这段代码测试没有问题