C# - 如何在另一个列表框中打印字符串?
C# - How do I print a string in another listbox?
此代码的一部分将打印 'New Ip client found',我添加了一段代码(注释部分),它将在其中获取主机名。我希望将该主机名打印在单独的列表框中。我应该怎么做?我试图附加它,但它不会显示在我在 [设计] 中提供的列表框中。
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);
}
}
}
谢谢。
我已经很长时间没有使用 Windows 表单了,所以请珍惜它的价值。将文本添加到列表框后尝试执行以下操作:
listBox1.Invalidate();
listBox1.Update();
这是您需要添加到列表框的代码,只需将 listbox1 替换为您的列表框的名称\id
Action action = new Action(() => {
listBox1.Items.Add(sClientHost);
});
this.Dispatcher.Invoke(action, DispatcherPriority.ApplicationIdle);
既然你是从另一个线程引用主线程,你不能直接这样做。不允许跨线程操作,防止死锁。按照以下操作从另一个线程访问主线程中的列表。
lstYourListBox.BeginInvoke(new MethodInvoker(() => lstYourListView.items.Add(clientIP));
此代码的一部分将打印 'New Ip client found',我添加了一段代码(注释部分),它将在其中获取主机名。我希望将该主机名打印在单独的列表框中。我应该怎么做?我试图附加它,但它不会显示在我在 [设计] 中提供的列表框中。
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);
}
}
}
谢谢。
我已经很长时间没有使用 Windows 表单了,所以请珍惜它的价值。将文本添加到列表框后尝试执行以下操作:
listBox1.Invalidate();
listBox1.Update();
这是您需要添加到列表框的代码,只需将 listbox1 替换为您的列表框的名称\id
Action action = new Action(() => {
listBox1.Items.Add(sClientHost);
});
this.Dispatcher.Invoke(action, DispatcherPriority.ApplicationIdle);
既然你是从另一个线程引用主线程,你不能直接这样做。不允许跨线程操作,防止死锁。按照以下操作从另一个线程访问主线程中的列表。
lstYourListBox.BeginInvoke(new MethodInvoker(() => lstYourListView.items.Add(clientIP));