C# - 如何在另一个列表框中打印字符串?

时间:2015-09-01 16:21:34

标签: c# winforms listbox client-server

此代码的一部分将打印“找到的新Ip客户端”,我添加了一个代码(注释部分),它将获取主机名。我希望该主机名打印在单独的列表框中。我该怎么办?我试图追加它但它不会显示在我在[设计]中提供的列表框中。

public void performConnect()
{
    while (true)
    {
        if (myList.Pending())
        {
            thrd = thrd + 1;
            tcpClient = myList.AcceptTcpClient();

            IPEndPoint ipEndPoint = (IPEndPoint)tcpClient.Client.RemoteEndPoint;
            string clientIP = ipEndPoint.Address.ToString();
            nStream[thrd] = tcpClient.GetStream();

            // IPHostEntry ipEntry = Dns.Resolve(clientIP);
            // string sClientHost = ipEntry.HostName;

            currentMsg = "\n New IP client found :" + clientIP;
            recieve[thrd].Start();

            //StringBuilder sb = new StringBuilder();                        
            // sb.Append(listBox1.Text);                        
            // sb.Append(sClientHost + " is online.");                       
            //listBox1.Text = sb.ToString();

            this.Invoke(new rcvData(addNotification));
            try
            {
                addToIPList(clientIP);

            }
            catch (InvalidOperationException exp)
            {
                Console.Error.WriteLine(exp.Message);
            }
            Thread.Sleep(1000);
        }
    }
}

谢谢。

3 个答案:

答案 0 :(得分:1)

由于您从另一个线程引用主线程,因此您不能直接执行它。不允许跨线程操作来防止死锁。执行以下操作,从另一个线程访问主线程中的列表。

lstYourListBox.BeginInvoke(new MethodInvoker(() => lstYourListView.items.Add(clientIP));

答案 1 :(得分:0)

我很长一段时间没有使用过Windows Forms,所以请考虑一下它的价值。将文本添加到列表框后尝试执行以下操作:

listBox1.Invalidate();
listBox1.Update();

答案 2 :(得分:0)

这是您需要添加到列表框的代码,只需将listbox1替换为列表框的名称\ id

Action action = new Action(() => { 
                listBox1.Items.Add(sClientHost); 
            });
this.Dispatcher.Invoke(action, DispatcherPriority.ApplicationIdle);