我遇到锁问题。我可以从服务器接收数据,但是当服务器发送多个数据时,回调方法会在执行任何操作之前读取数据并读取下一个数据。
示例:
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方法?
谢谢...