socket 异步接收不到数据问题
代码如下:
         public  void CommuniteHelp_TCP()
         {
             while (true)
             {
                 try
                 {
                     MREvent.Reset();
                     tcpListener.BeginAcceptTcpClient(new AsyncCallback(AsynAccept), tcpListener);
                     MREvent.WaitOne();
                 }
                 catch (Exception ex)
                 {
                     System.Diagnostics.Debug.Print("运行方法: CommuniteHelp 发生错误:" + ex.Message);
                 }
             }
         }
         private void AsynAccept(IAsyncResult mtcplisten)  
         {
             TcpListener mtcpListener = (TcpListener)mtcplisten.AsyncState;
             TcpClient mtcpClient = mtcpListener.EndAcceptTcpClient(mtcplisten);
             MREvent.Set();
             Thread thread_dotcp = new Thread(new ParameterizedThreadStart(ThreadAsynReceiveData));
             thread_dotcp.IsBackground = true;
             thread_dotcp.Start(mtcpClient);              
         }
         private void ThreadAsynReceiveData(object mobj)
         {
             TcpClient mtcpClient = mobj as TcpClient;
             byte[] receiveBytes = new byte[1024];
             mtcpClient.Client.BeginReceive(receiveBytes, 0, 1024, SocketFlags.None, new AsyncCallback    (doneAsynAccept), mtcpClient);
         }
private void doneAsynAccept(IAsyncResult iar)
         {
             try
             {
                 lock (lockobj)
                 {
                     TcpClient mtcpClient = (TcpClient)iar.AsyncState;
                      int dataCount = mtcpClient.Client.EndReceive(iar);
                         if (dataCount > 0)
                         {
                             byte[] receiveBytes = new byte[dataCount];
                             IAsyncResult Result= mtcpClient.Client.BeginReceive(receiveBytes, 0, dataCount, SocketFlags.None, new AsyncCallback(doneAsynAccept), mtcpClient);  // 这里接收不到数据,请问为什么?                              
                             StructModel.tcpSendTo tcpsendto = new StructModel.tcpSendTo();
                             tcpsendto.point = ((IPEndPoint)mtcpClient.Client.RemoteEndPoint);
                             tcpsendto.oreceiveBytes = receiveBytes;
                             tcpsendto.receiveBytesLength = (ushort)dataCount;
                             tcpsendto.ns = mtcpClient.GetStream();
                             tcpsendto.tcpClient = mtcpClient;
                             DoWork(tcpsendto);
                         }                                            
                     //mtcpClient.Close();
                     //mtcpClient = null;
                 }
             }
             catch (Exception ee)
             {
                 ErrorLog.WriteErrorLog("CRTUClient_Udp:CRTUClient", "DoWork", "", ee);
             }
             finally
             {
                 GC.Collect();
                 Thread.CurrentThread.Abort();
             }
         }
------解决方案--------------------
receiveBytes定义为窗体变量,不是函数变量. dataCount > 0时 receiveBytes就已经收到数据了.