单击通知区域网络图标可阻止TcpClient接收数据

时间:2014-02-27 07:03:01

标签: c# .net winforms tcpclient

我正在使用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();
}

为什么会发生这种情况的任何想法?只需知道点击通知区域中的网络图标时可能会发生什么,将会很有帮助。

1 个答案:

答案 0 :(得分:0)

我发现发生这种情况的原因是代码部分有一个长时间运行的循环,用于检查互联网和服务器连接状态。当使用通知区域图标检查网络连接状态时,长时间运行的循环完全利用CPU,导致没有剩余处理能力来显示表单组件。

将该代码更改为异步并完全避免循环解决了这个问题。