internal void FlushQueue () {
CheckTimers (DateTime.UtcNow);
- while (MessageQueue.Count > 0) {
- object queueobj = MessageQueue.Dequeue ();
- if (queueobj is GCHandle) {
- XplatUIDriverSupport.ExecuteClientMessage((GCHandle)queueobj);
- } else {
- MSG msg = (MSG)queueobj;
- NativeWindow.WndProc (msg.hwnd, msg.message, msg.wParam, msg.lParam);
+ lock (queuelock) {
+ while (MessageQueue.Count > 0) {
+ object queueobj = MessageQueue.Dequeue ();
+ if (queueobj is GCHandle) {
+ XplatUIDriverSupport.ExecuteClientMessage((GCHandle)queueobj);
+ } else {
+ MSG msg = (MSG)queueobj;
+ NativeWindow.WndProc (msg.hwnd, msg.message, msg.wParam, msg.lParam);
+ }
}
}
}
msg.message = Msg.WM_MOUSEHOVER;
msg.wParam = GetMousewParam (0);
msg.lParam = (IntPtr)((ushort)Hover.X << 16 | (ushort)Hover.X);
- MessageQueue.Enqueue (msg);
+ EnqueueMessage (msg);
}
}
#endregion
MSG msg = new MSG ();
msg.message = Msg.WM_PAINT;
msg.hwnd = hwnd.Handle;
- MessageQueue.Enqueue (msg);
+ EnqueueMessage (msg);
hwnd.expose_pending = true;
}
} else {
msg.wParam = hrgn == IntPtr.Zero ? (IntPtr)1 : hrgn;
msg.refobject = rgn;
msg.hwnd = hwnd.Handle;
- MessageQueue.Enqueue (msg);
+ EnqueueMessage (msg);
hwnd.nc_expose_pending = true;
}
msg.message = message;
msg.wParam = wParam;
msg.lParam = lParam;
- MessageQueue.Enqueue (msg);
+ EnqueueMessage (msg);
return true;
}
[MonoTODO]
internal override void SendAsyncMethod (AsyncMethodData method) {
// Fake async
- MessageQueue.Enqueue (GCHandle.Alloc (method));
+ lock (queuelock) {
+ MessageQueue.Enqueue (GCHandle.Alloc (method));
+ }
}
[MonoTODO]