在异步通信中,在异步接受数据完成时 stream.EndRead(result) 报错“无法从传输连接中读取数据: 由于线程退出或应用程序请求,已放弃 I/O 操作”,怎么回事,线程出错?代码如下:
private void BeginReceiveData()
        {
            if (m_Connected)
            {
                if (!m_Client.Connected)
                {
                    ReConnect();
                    return;
                }
                StateObject state = new StateObject();
                state.buffer=new byte[m_BufferSize];
                state.dataStream = m_Client.GetStream();
                m_Client.GetStream().BeginRead(state.buffer, 0, m_BufferSize, new AsyncCallback(ReadCallBack), state);
            }
        }
private void ReadCallBack(IAsyncResult result)
        {
            if (!m_Connected)
                return;
            StateObject state = (StateObject)result.AsyncState;
            NetworkStream stream = state.dataStream;
            try
            {
                if (!stream.CanRead)
                    return;
                int byteLen = stream.EndRead(result);    //这里报错
                //if (byteLen == 0)
                //{
                //    ReConnect();
                //    return;
                //}
                DataUnit duReceive = new DataUnit();
                duReceive.Data = new byte[byteLen];
                Array.Copy(state.buffer,duReceive.Data,byteLen);
                List<DataUnit> duList = BasePacket.ParsePacket(duReceive, ref this.m_DataLeft);
                if (duList.Count > 0)
                {
                    for (int i = 0; i < duList.Count; i++)
                    {
                        packQueue.AddPacket(new BasePacket(duList[i]));
                    }
                }
                this.m_LastRecvTime = DateTime.Now;
                Array.Clear(state.buffer, 0, m_BufferSize);
                stream.BeginRead(state.buffer, 0, m_BufferSize, new AsyncCallback(ReadCallBack), state);
            }
            catch(Exception ex)
            {
                string s = ex.Message;
                ReConnect();
            }