在循环内联系TCP侦听器时应用程序挂起
本文关键字:应用程序 挂起 侦听器 TCP 循环 联系 | 更新日期: 2023-09-27 18:26:39
我一直在尝试设置一个客户端应用程序,该应用程序使用TCP套接字与控制台服务器应用程序联系。
我需要我的客户端不断地与服务器检查"是否有可用的数据?"在某个时候,服务器会用数据做出响应,这些数据将显示在屏幕上的应用程序中。
服务器应用程序是一个基于控制台的应用程序,在客户端上使用winforms,以便用户可以单击GUI中的按钮并启动进程。收到数据后,我需要将其显示在屏幕上的文本框中。
问题是winform应用程序挂在循环中。它可以工作,但完全禁用,不允许任何按钮点击,也不会在屏幕上显示返回的数据。
这就是我如何设置客户端应用程序:
private void button1_Click(object sender, EventArgs e)
{
TcpClient client = new TcpClient("127.0.0.1", 8888);
try
{
Stream s = client.GetStream();
StreamReader sr = new StreamReader(s);
StreamWriter sw = new StreamWriter(s);
sw.AutoFlush = true;
Console.WriteLine(sr.ReadLine());
while (true)
{
tbData.Text = "Name: ";
string name = textBox2.Text;
sw.WriteLine(name);
if (name != null)
{
tbData.Text = sr.ReadLine();
}
Thread.Sleep(5000);
}
s.Close();
}
finally
{
client.Close();
}
}
我不确定这是否是最好的方法,但它只是每5秒发送一个请求,但我需要在后台运行该部分(前提是这是最好的方式。
您正在阻塞UI线程。找出这意味着什么,并使用任何常见的技术来解锁它。
当您在UI线程上运行代码时,UI在该时间段内无法更新。