如何在TCP/IP消息传递中直接从服务器接收文本,而无需在c#中单击按钮

本文关键字:文本 按钮 单击 TCP IP 消息传递 服务器 | 更新日期: 2023-09-27 18:17:09

我用c#编写了一个WPF应用程序客户端,用于通过TCP/IP消息传递接收文本。但是我必须点击button2从服务器接收数据。我想问如何使像一个聊天应用程序,其中文本直接收到没有点击按钮2 ?我的代码如下:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        textBox1.Text="Client Started";
        clientSocket.Connect("10.228.183.81", 5000);
        textBox2.Text = "Client Socket Program - Server Connected ...";
    }
    private void button2_Click(object sender, RoutedEventArgs e)
    {
         NetworkStream serverStream = clientSocket.GetStream();
            byte[] inStream = new byte[10025];
            serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
            string returndata = System.Text.Encoding.ASCII.GetString(inStream);
            textBox2.Text = returndata;
    }
}

}

如何在TCP/IP消息传递中直接从服务器接收文本,而无需在c#中单击按钮

您需要使您的应用程序线程化。所以你接收到的所有东西都应该由一个线程来处理。

你可以在这里看一个很好的样本。

您可以像这样实现一个计时器对象,以便根据提供的间隔进行检查。然后你可以使用任务工厂来防止它锁定你的UI线程,并通过委托更新接收到的数据的TextBox(我的是一个简单的可能不是你最可能想要实现它,只是给出一个想法,例如目的)。

Timer myTimer = new Timer();
//On application startup start your timer like so
myTimer.Tick += new EventHandler(TimerEventProcessor);
// checks every 5 seconds, Interval accepts double in milliseconds
myTimer.Interval = 5000;
myTimer.Start();
// Then create a event handler for your timer Tick event
private void TimerEventProcessor(Object myObject, EventArgs myEventArgs) {
    // stop your timer and restart it possibly once you received data and have updated gui
    // using task will keep it from Locking UI thread
    Task.Factory.StartNew(() => 
    { 
        //perform check to socket and update UI using some type of delegate like below
        this.Invoke((MethodInvoker)delegate {
              TextBox.Append(Recieved Text From Socket); // runs on UI thread
         });
    }
}