System.Windows.Forms.XplatUICarbon.GetMessage C# (CSharp) Method

GetMessage() private method

private GetMessage ( object queue_id, System.Windows.Forms.MSG &msg, IntPtr hWnd, int wFilterMin, int wFilterMax ) : bool
queue_id object
msg System.Windows.Forms.MSG
hWnd System.IntPtr
wFilterMin int
wFilterMax int
return bool
		internal override bool GetMessage(object queue_id, ref MSG msg, IntPtr hWnd, int wFilterMin, int wFilterMax) {
			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) {
				loop:

				if (MessageQueue.Count <= 0) {
					if (Idle != null) 
						Idle (this, EventArgs.Empty);
					else if (TimerList.Count == 0) {
						ReceiveNextEvent (0, IntPtr.Zero, 0.15, true, ref evtRef);
						if (evtRef != IntPtr.Zero && target != IntPtr.Zero) {
							SendEventToEventTarget (evtRef, target);
							ReleaseEvent (evtRef);
						}
					} else {
						ReceiveNextEvent (0, IntPtr.Zero, NextTimeout (), true, ref evtRef);
						if (evtRef != IntPtr.Zero && target != IntPtr.Zero) {
							SendEventToEventTarget (evtRef, target);
							ReleaseEvent (evtRef);
						}
					}
					msg.hwnd = IntPtr.Zero;
					msg.message = Msg.WM_ENTERIDLE;
					return GetMessageResult;
				}
				object queueobj = MessageQueue.Dequeue ();
				if (queueobj is GCHandle) {
					XplatUIDriverSupport.ExecuteClientMessage((GCHandle)queueobj);
					goto loop;
				} else {
					msg = (MSG)queueobj;
				}
			}
			return GetMessageResult;
		}
		
XplatUICarbon