我想把一些信息通过log1输出到一个ListBox(lbxlog)中,在其他线程中调用下面的委托,执行并无错误,但是执行完后此ListBox中的内容并不更新,到底是怎么回事?
望不吝赐教,谢谢。        public void write(string str)
        {
            lbxLog.Items.Add(str);
            //lbxLog.Refresh();
        }//执行到这里,lbxLog的Item会增加一个,但界面上并无反应。如果在主线程中直接用lbxLog.Items.Add(str),却能成功将string增加到界面中        private delegate void writeEvent(string str);        public void log1(string str)
        {
            writeEvent writeEvent = new writeEvent(write);
            writeEvent(str);
        }

解决方案 »

  1.   

    调试一下……看看那个str的值是否存在?
      

  2.   

      delegate void ListBoxCallback(string str);
            public void SetListBox(string str)
            {
                if (listbox.InvokeRequired == true)
                {
                    ListBoxCallback d = new ListBoxCallback(SetListBox);
                    listbox.Invoke(d, str);            }
                else
                {
                    listbox.Items.Add(str);
                    listbox.SelectedIndex = listbox.Items.Count - 1;
                    listbox.ClearSelected();            }
            }
    用这种方法吧,适用的话给点分谢谢
      

  3.   

    this.lbxLog.BeginInvoke(new writeEvent(write),str)
      

  4.   

    使用FORM的Invoke函数 调用委托.
      

  5.   

    Form 空间要用委托来写,楼上的几个都可以.
      

  6.   

    在主线程中定义: 
    public void write(string str) 

          lbxLog.Items.Add(str); 
    }
    delegate void writeEvent(string str);在子线程中:
    writeEvent log = write; 
    this.Invoke(log,str);