正确使用锁定方法与Async BeginRead方法

时间:2012-01-13 01:18:13

标签: c#

我遇到锁问题。我可以从服务器接收数据,但是当服务器发送多个数据时,回调方法会在执行任何操作之前读取数据并读取下一个数据。

示例:

private void start()
{
    networkStream.BeginRead(buffer, 0, buffer.Length,
                            new AsyncCallback(dataRecievedCallback), null);
}

 private void dataRecievedCallback(IAsyncResult rst)
 {
     try
     {
         int currentDataSize = networkStream.EndRead(rst);

         string currentData = convertToString(buffer, currentDataSize);

         srvDataWorker.RecievedData.Content += currentData;
         srvDataWorker.RecievedData.Size += currentDataSize;

         if (IsValidXml(srvDataWorker.RecievedData.Content))
         {
             if (ServerConfig.SrvConfig.SaveIncomingData)
                 saveIncomingData(srvDataWorker.RecievedData.Content);

这里我正在解析收到的xml数据。

             parseXmlFeed(srvDataWorker.RecievedData.Content);

我在这里向所有客户发送收到的数据。

             sendToAllClients(srvDataWorker.RecievedData.Content);
             srvDataWorker.RecievedData.clear();
         }
         else
         {
             Display.Write("Data Waiting...", true);
         }

         clearBuffer();

         networkStream.BeginRead(buffer, 0, buffer.Length, 
                                 new AsyncCallback(dataRecievedCallback), null);
     } 
     catch (Exception ex)
     {
        //exception... 
     }
 }

我已尝试过上面的代码设置锁定方法,但它仍然无法帮助我。

clearBuffer(); 方法后,我应该把锁定放在哪里?

示例:

 lock(this)
 {
      networkStream.BeginRead(buffer, 0, buffer.Length, 
                              new AsyncCallback(dataRecievedCallback), null);
 }

clearBuffer(); 之前,每个代码但不是BeginRead方法?

谢谢...

0 个答案:

没有答案