我正在使用Windows Forms .NET 4.5开发实时图表应用程序。为了从服务器接收数据,我使用的是System.Net.Sockets.TcpClient对象,该对象在建立连接后异步接收来自服务器的数据。
由于某些奇怪的原因,当点击通知区域中的网络图标(告诉您wifi网络列表等)时,数据接收速度会减慢6到8秒。数据接收速度在6到8秒后恢复正常。据我所知,在此延迟阶段没有产生异常。
这是接收数据的代码:
NetworkStream stream = tcpClient.GetStream();
try
{
while (tcpClient.Available > 0) //Data available to be read
{
//byte[] data = new byte[500];
int receiveChunkCount = 256; //receiveChunkOut = sendChunkCount in patient code
byte[] data = new byte[receiveChunkCount];
int bytesRead = 0, chunkSize = 1;
while (bytesRead < data.Length)
bytesRead += chunkSize = await stream.ReadAsync(data, bytesRead, data.Length - bytesRead);
if (TcpDataReceived != null)
TcpDataReceived(this, new TcpDataReceivedEventArgs(data));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (stream != null)
stream.Dispose();
}
为什么会发生这种情况的任何想法?只需知道点击通知区域中的网络图标时可能会发生什么,将会很有帮助。
答案 0 :(得分:0)
我发现发生这种情况的原因是代码部分有一个长时间运行的循环,用于检查互联网和服务器连接状态。当使用通知区域图标检查网络连接状态时,长时间运行的循环完全利用CPU,导致没有剩余处理能力来显示表单组件。
将该代码更改为异步并完全避免循环解决了这个问题。