C# 单击通知区域网络图标会阻止TcpClient接收数据
我正在使用WindowsForms.NET4.5开发一个实时图表应用程序。为了从服务器接收数据,我使用System.Net.Sockets.TcpClient对象,该对象在建立连接后从服务器异步接收数据 出于某种奇怪的原因,当单击通知区域中的网络图标(它告诉您wifi网络列表等)时,数据接收速度会减慢6到8秒。数据接收速度在6到8秒后恢复正常。据我所知,在这个延迟阶段没有生成异常 这是接收数据的代码:C# 单击通知区域网络图标会阻止TcpClient接收数据,c#,.net,winforms,tcpclient,C#,.net,Winforms,Tcpclient,我正在使用WindowsForms.NET4.5开发一个实时图表应用程序。为了从服务器接收数据,我使用System.Net.Sockets.TcpClient对象,该对象在建立连接后从服务器异步接收数据 出于某种奇怪的原因,当单击通知区域中的网络图标(它告诉您wifi网络列表等)时,数据接收速度会减慢6到8秒。数据接收速度在6到8秒后恢复正常。据我所知,在这个延迟阶段没有生成异常 这是接收数据的代码: NetworkStream stream = tcpClient.GetStream(); t
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();
}
NetworkStream=tcpClient.GetStream();
尝试
{
while(tcpClient.Available>0)//可读取的数据
{
//字节[]数据=新字节[500];
int-receiveChunkCount=256;//患者代码中的receiveChunkOut=sendChunkCount
字节[]数据=新字节[receiveChunkCount];
int bytesRead=0,chunkSize=1;
while(字节读取<数据长度)
bytesRead+=chunkSize=wait stream.ReadAsync(data,bytesRead,data.Length-bytesRead);
如果(TcpDataReceived!=null)
TcpDataReceived(这是新的TcpDataReceivedEventArgs(数据));
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
最后
{
if(流!=null)
stream.Dispose();
}
你知道为什么会发生这种情况吗?只要知道在单击通知区域中的网络图标时可能发生的情况就很有帮助。我发现发生这种情况的原因是代码中检查internet和服务器连接状态的部分有一个长时间运行的循环。当使用通知区域图标检查网络连接状态时,长时间运行的循环完全利用了CPU,导致没有处理能力显示表单组件 将该代码更改为异步并避免循环完全解决了这个问题