本帖最后由 zflonghui 于 2014-09-17 15:22:06 编辑

解决方案 »

  1.   


    哎 循环我用了 但是在listbox得到的不是我想要的样子。
    先看一下这个
     private void set_BoxText(string s)
      {
     ViewDataListBox.Items.Clear();  
      ViewDataListBox.Items.Add(s.ToString());
    }
    因为我是从targetPC上得到数据 然后在listbox显示出来,要是用循环在listbox显示的不是数组 而是一个数。然后我要是把ViewDataListBox.Items.Clear();  去掉,那么在listbox上得到虽然是数组,但是数据会不停在listbox上增加,不容易观察了。
                
      

  2.   

    循环写到set_BoxText里,
    或者先调用clear,再循环调用add
    你每添加一个之前都clear一次,当然就没有了
      

  3.   

    没用的 这些我都试了 因为只要委托到set_BoxText是一个数 而不是数组的话 那么得到的结果是一样的
    这是我在子线程里的代码
    var array = new List<string>(); 
    for (int i = 0; i < listbox.Items.Count; i++)
                         {
                             Double[] data1 = sc2.Signals[listbox.Items[i].ToString()].HostScopeSignalDataObject.GetData();
                             array.Add(Convert.ToString(data1.First()));
                             array2 = array.ToArray();
                         }
     ViewDataListBox.Dispatcher.Invoke(Set_Text, new object[] { array2 });
      

  4.   

    你要把循环写在委托里面的话,参数也得是数组啊,直接把数组整个传递进来不就得了如果是一个数的话,你需要定义另一个委托,就专门执行clear
      

  5.   

    如果你之前定义的是这样:
     delegate void f(string s)
    那么改成
    delegate void f(List<string> s)不就完了?
    对应的,你的
    set_BoxText(string s)
    要改成
    set_BoxText(List<string> s)
    然后把foreach写到这个函数里面去
    先clear,然后foreach
      

  6.   


            ///线程函数
             private void threadFunc()
            {
                string[] infos = new string[10];
                for (int i = 0; i < 10; i++)
                {
                    infos[i] = "mess:" + i.ToString();
                }
                ShowArray(infos);
              
            }        ///委托刷新
            private void ShowArray(string[] info)
            {
                this.Invoke(new Action(() => {
                    listBox1.Items.Clear();
                    for (int i = 0; i < info.Length; i++)
                    {
                        listBox1.Items.Add(info[i]);
                    }
                }));
            }
        ///启动线程
      System.Threading.Thread th = new System.Threading.Thread(new System.Threading.ThreadStart(threadFunc));
      th.IsBackground = true;
      th.Start();