Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异步客户端套接字c#。我如何在循环中等待来自服务器的信息而不阻塞程序的操作?_C#_Winforms_Sockets_Asynchronous_Tcpclient - Fatal编程技术网

异步客户端套接字c#。我如何在循环中等待来自服务器的信息而不阻塞程序的操作?

异步客户端套接字c#。我如何在循环中等待来自服务器的信息而不阻塞程序的操作?,c#,winforms,sockets,asynchronous,tcpclient,C#,Winforms,Sockets,Asynchronous,Tcpclient,我创建了与TCP服务器通信的类,如下所示: public class Tcp_client_server_communication { private static TcpClient client; private static String response = String.Empty; public void Initialize(string ip, int port) { client = new TcpClient(ip, por

我创建了与TCP服务器通信的类,如下所示:

public class Tcp_client_server_communication
{
    private static TcpClient client;
    private static String response = String.Empty;

    public void Initialize(string ip, int port)
    {
        client = new TcpClient(ip, port);

    }
    public string BeginRead()
    {
        var buffer = new byte[16];
        var ns = client.GetStream();
        ns.BeginRead(buffer, 0, buffer.Length, EndRead, buffer);
     
    }

    public void EndRead(IAsyncResult result)
    {
        var buffer = (byte[])result.AsyncState;
        var ns = client.GetStream();
        var bytesAvalible = ns.EndRead(result);

        MessageBox.Show(Encoding.ASCII.GetString(buffer));
        BeginRead();

    }
}
要调用这些方法,我使用:

.Initialize();
.BeginRead();
它工作正常,但我想在多行
TextBox
而不是
MessageBox
中显示来自服务器的每条消息


如何才能做到这一点?

您可以创建一个列表对象来保存传递的所有消息,然后设置一个计时器,以便每隔一段时间检查列表是否已添加到。将消息添加到文本框后,从列表中删除您在每个勾号上读取的内容


这个项目比那个要复杂一点,但这里有一个我在中学时做过的老项目作为例子:

你可以创建一个列表对象来保存传递的所有消息,然后设置一个计时器,每隔一段时间检查一次列表是否已添加到。将消息添加到文本框后,从列表中删除您在每个勾号上读取的内容


这个项目比那个要复杂一些,但这里有一个我在中学时做过的老项目作为例子:

第一个错误是忽略了可用的
字节数,这告诉你有多少
缓冲区是有效的。第二个错误是假设“消息”。TCP是一个无止境的字节流,而不是消息流<代码>写入
读取
不是“配对”1-1。因此,你的问题基本上与tcpclient或流读取无关,而是从不同的线程将内容写入多行文本框。因此,您应该研究以下两件事:1)“C#将多个字符串写入多行文本框”和2)“C#从不同的线程将文本写入控件”,您只需复制粘贴这些搜索查询第一个错误是忽略
字节可用
,这会告诉您有多少
缓冲区
是有效的。第二个错误是假设“消息”。TCP是一个无止境的字节流,而不是消息流<代码>写入
读取
不是“配对”1-1。因此,你的问题基本上与tcpclient或流读取无关,而是从不同的线程将内容写入多行文本框。因此,您应该研究以下两件事:1)“C#将多个字符串写入多行文本框”和2)“C#将文本写入不同线程的控件”,您只需复制粘贴这些搜索查询即可