【问题标题】:Application hanging when contacting TCP listener inside a loop在循环内联系 TCP 侦听器时应用程序挂起
【发布时间】:2014-12-11 15:44:04
【问题描述】:

我一直在尝试设置一个客户端应用程序,它使用 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 秒发送一次请求,但我需要该部分在后台运行(前提是这是最好的方法。

【问题讨论】:

标签: c# winforms console tcpclient tcplistener


【解决方案1】:

您正在阻塞 UI 线程。找出这意味着什么,并使用任何常见的技术来解除它。

当您在 UI 线程上运行代码时,UI 无法及时更新。

【讨论】:

    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 2012-08-30
    • 2021-01-26
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    相关资源
    最近更新 更多