public void Receive(PspPointer* PointerToMessage, Action WakeUp) { lock (this) { Action Extract = () => { *PointerToMessage = Messages.Last.Value; Messages.RemoveLast(); if (WakeUp != null) WakeUp(); }; ExtractQueue.Enqueue(Extract); CheckQueue(); } }