/// 不停的接收从服务器发来的消息 /// </summary> void Receive() { try { while (true) { byte[] buffer = new byte[1024];//1024*1024*2 int r = socketSend.Receive(buffer); string s = Encoding.UTF8.GetString(buffer, 0, r); ShowMsg(socketSend.RemoteEndPoint + ":" + s); int intRecData = int.Parse(s); Chart.ChartData = intRecData; //mybtn.BtnData = buffer; } } catch(Exception ex) { ShowMsg(ex.Message); MessageBox.Show(ex.Message); } }优化这段代码
时间: 2024-01-13 16:03:31 浏览: 110
ICESAT/GLAS GLAH01 Product Data Dictionary.pdf
在上述代码中,可以考虑使用异步方法来接收从服务器发来的消息,以避免阻塞UI线程。以下是一个示例:
```
async void Receive()
{
try
{
while (true)
{
byte[] buffer = new byte[1024];//1024*1024*2
int r = await socketSend.ReceiveAsync(new ArraySegment<byte>(buffer), SocketFlags.None);
string s = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint + ":" + s);
int intRecData = int.Parse(s);
Chart.ChartData = intRecData;
//mybtn.BtnData = buffer;
}
}
catch (Exception ex)
{
ShowMsg(ex.Message);
MessageBox.Show(ex.Message);
}
}
```
在上述代码中,使用了`await socketSend.ReceiveAsync()`方法来异步接收数据,这样可以避免阻塞UI线程。同时,也可以考虑使用`ArraySegment<byte>`来避免在每次接收数据时都创建一个新的缓冲区。
阅读全文