上述代码能否改成一个button按钮进行收发
时间: 2024-04-20 22:23:59 浏览: 15
是的,可以将接收和发送数据的逻辑放在同一个按钮的事件处理程序中。下面是修改后的代码示例:
```csharp
private void btnSendReceive_Click(object sender, EventArgs e)
{
// 开始接收和发送数据
Thread sendReceiveThread = new Thread(SendReceiveData);
sendReceiveThread.Start();
}
private void SendReceiveData()
{
while (true)
{
// 开始接收数据
byte[] receivedData = udpClient.Receive(ref remoteEndPoint);
// 将接收到的字节数组转换为字符串
string receivedMessage = Encoding.UTF8.GetString(receivedData);
// 在 UI 线程更新 UI 控件
Invoke(new Action(() =>
{
// 在文本框中显示接收到的消息
txtReceived.Text = receivedMessage;
}));
// 获取要发送的消息
string message = txtMessage.Text;
// 将消息转换为字节数组
byte[] sendData = Encoding.UTF8.GetBytes(message);
// 发送数据
udpClient.Send(sendData, sendData.Length, remoteEndPoint);
// 清空文本框
Invoke(new Action(() =>
{
txtMessage.Text = "";
}));
}
}
```
在上述代码中,我们将接收和发送数据的逻辑放在了 `SendReceiveData` 方法中,并在 `btnSendReceive_Click` 中启动了一个新线程来执行该方法。循环中先接收数据,然后将接收到的消息显示在文本框中,接着获取要发送的消息,并将其发送出去。最后清空文本框。这样,点击按钮后就会开始循环地接收和发送数据。请注意,在无限循环中执行操作时,同样需要谨慎处理退出条件,以免导致程序无法结束或无法正确退出。