internal override bool PeekMessage(Object queue_id, ref MSG msg, IntPtr hWnd, int wFilterMin, int wFilterMax, uint flags) {
IntPtr evtRef = IntPtr.Zero;
IntPtr target = GetEventDispatcherTarget();
CheckTimers (DateTime.UtcNow);
ReceiveNextEvent (0, IntPtr.Zero, 0, true, ref evtRef);
if (evtRef != IntPtr.Zero && target != IntPtr.Zero) {
SendEventToEventTarget (evtRef, target);
ReleaseEvent (evtRef);
}
lock (queuelock) {
if (MessageQueue.Count <= 0) {
return false;
} else {
object queueobj;
if (flags == (uint)PeekMessageFlags.PM_REMOVE)
queueobj = MessageQueue.Dequeue ();
else
queueobj = MessageQueue.Peek ();
if (queueobj is GCHandle) {
XplatUIDriverSupport.ExecuteClientMessage((GCHandle)queueobj);
return false;
}
msg = (MSG)queueobj;
return true;
}
}
}