public void Read(Guid request_id, out ChatPackage[] chats) { ToLockRead(); VisitTime = DateTime.Now; Invaild = false; List <ChatPackage> buffer = new List <ChatPackage>(); KXTUserChatHead value; if (!RequestList.TryGetValue(request_id, out value)) { ToLockWrite(); value = new KXTUserChatHead { EndRecorder = Write.EndRecorder, RecorderSize = Write.RecorderSize }; ToUnLockWrite(); RequestList.Add(request_id, value); } for (int i = 0; i < 10; ++i) { if (0 == value.EndRecorder) { break; } byte[] temp = new byte[value.RecorderSize]; Stream.Position = value.EndRecorder; Stream.Read(temp, 0, temp.Length); KXTUserChatItem item = KXTUserChatItem.Parse(temp); value.EndRecorder = item.PreRecorder; value.RecorderSize = item.PreSize; if (ChatType) { buffer.Add(new FriendChatPackage { Message = item.Message, Sender = IKXTServer.DataConvert.GetString(item.Sender), Time = item.Time }); } else { buffer.Add(new FriendChatPackage { Message = item.Message, Sender = IKXTServer.DataConvert.GetString(item.Sender), Time = item.Time }); } } ToUnLockRead(); chats = buffer.ToArray(); }