internal override IntPtr SendMessage (IntPtr hwnd, Msg message, IntPtr wParam, IntPtr lParam)
{
Hwnd h;
h = Hwnd.ObjectFromHandle(hwnd);
if (h != null && h.queue != ThreadQueue (Thread.CurrentThread)) {
AsyncMethodResult result;
AsyncMethodData data;
result = new AsyncMethodResult ();
data = new AsyncMethodData ();
data.Handle = hwnd;
data.Method = new WndProcDelegate (NativeWindow.WndProc);
data.Args = new object[] { hwnd, message, wParam, lParam };
data.Result = result;
SendAsyncMethod (data);
#if DriverDebug || DriverDebugThreads
Console.WriteLine ("Sending {0} message across.", message);
#endif
return IntPtr.Zero;
}
string key = hwnd + ":" + message;
if (messageHold[key] != null)
messageHold[key] = ((int)messageHold[key]) - 1;
return NativeWindow.WndProc(hwnd, message, wParam, lParam);
}