如何在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;
}
}
}
您需要使您的应用程序线程化。所以你接收到的所有东西都应该由一个线程来处理。
你可以在这里看一个很好的样本。
您可以像这样实现一个计时器对象,以便根据提供的间隔进行检查。然后你可以使用任务工厂来防止它锁定你的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
});
}
}