public Event Read()
{
var node = this.list.First;
LinkedListNode<IEventQueue> lastNode = null;
while (node != null)
{
var q = node.Data;
if (!q.IsEmpty())
{
var e = q.Read();
if (e.TypeId == EventType.OnQueueClosed)
{
if (lastNode == null)
this.list.First = node.Next;
else
lastNode.Next = node.Next;
this.list.Count--;
}
return e;
}
lastNode = node;
node = node.Next;
}
return this.tree.IsEmpty() ? null : this.tree.Read();
}
}