internal static void SendAsyncMethod(AsyncMethodData data) { #if DriverDebug Console.WriteLine("SendAsyncMethod({0}): Called", data); #endif driver.SendAsyncMethod(data); }
// for NET_1_0 and NET_1_1 no (public) ExecutionContext exists // so we must use the System.Threading.CompressedStack class internal static void ExecuteClientMessage(GCHandle gchandle) { AsyncMethodData data = (AsyncMethodData)gchandle.Target; CompressedStack original = null; #if !MWF_ON_MSRUNTIME // Stack is non-null only if the security manager is active if (data.Stack != null) { original = Thread.CurrentThread.GetCompressedStack(); Thread.CurrentThread.SetCompressedStack(data.Stack); } #endif AsyncMethodResult result = data.Result; object ret; try { ret = data.Method.DynamicInvoke(data.Args); result.Complete(ret); } catch (Exception ex) { result.CompleteWithException(ex); return; } finally { #if !MWF_ON_MSRUNTIME if (data.Stack != null) { // whatever occurs we must revert to the original compressed // stack (null being a valid, empty, value in this case). Thread.CurrentThread.SetCompressedStack(original); } #endif gchandle.Free(); } }
internal static void ExecutionCallback(object state) { AsyncMethodData data = (AsyncMethodData)state; AsyncMethodResult result = data.Result; object ret; try { ret = data.Method.DynamicInvoke(data.Args); } catch (Exception ex) { if (result != null) { result.CompleteWithException(ex); return; } throw; } if (result != null) { result.Complete(ret); } }
internal static void ExecuteClientMessage(GCHandle gchandle) { AsyncMethodData data = (AsyncMethodData)gchandle.Target; try { if (data.Context == null) { ExecutionCallback(data); } else { ExecutionContext.Run(data.Context, new ContextCallback(ExecutionCallback), data); } } finally { gchandle.Free(); } }
static void ExecutionCallbackInContext(object state) { AsyncMethodData data = (AsyncMethodData)state; if (data.SyncContext == null) { ExecutionCallback(data); return; } var oldContext = SynchronizationContext.Current; SynchronizationContext.SetSynchronizationContext(data.SyncContext); try { ExecutionCallback(data); } finally { SynchronizationContext.SetSynchronizationContext(oldContext); } }
internal override void SendAsyncMethod(AsyncMethodData method) { throw new NotImplementedException(); }
internal abstract void SendAsyncMethod (AsyncMethodData method);
internal override void SendAsyncMethod (AsyncMethodData method) { // Fake async lock (queuelock) { MessageQueue.Enqueue (GCHandle.Alloc (method)); } }
internal IAsyncResult BeginInvokeInternal (Delegate method, object [] args, Control control) { AsyncMethodResult result; AsyncMethodData data; result = new AsyncMethodResult (); data = new AsyncMethodData (); data.Handle = control.GetInvokableHandle (); data.Method = method; data.Args = args; data.Result = result; if (!ExecutionContext.IsFlowSuppressed ()) { data.Context = ExecutionContext.Capture (); } XplatUI.SendAsyncMethod (data); return result; }
internal IAsyncResult BeginInvokeInternal (Delegate method, object [] args, Control control) { AsyncMethodResult result; AsyncMethodData data; result = new AsyncMethodResult (); data = new AsyncMethodData (); data.Handle = control.GetInvokableHandle (); data.Method = method; data.Args = args; data.Result = result; #if NET_2_0 if (!ExecutionContext.IsFlowSuppressed ()) { data.Context = ExecutionContext.Capture (); } #else #if !MWF_ON_MSRUNTIME if (SecurityManager.SecurityEnabled) { data.Stack = CompressedStack.GetCompressedStack (); } #endif #endif XplatUI.SendAsyncMethod (data); return result; }
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); DriverDebug("Sending {0} message across.", message); return IntPtr.Zero; } string key = hwnd + ":" + message; if (messageHold[key] != null) messageHold[key] = ((int)messageHold[key]) - 1; return NativeWindow.WndProc(hwnd, message, wParam, lParam); }
internal static void SendAsyncMethod(AsyncMethodData data) { DriverDebug("SendAsyncMethod ({0}): Called", data); driver.SendAsyncMethod(data); }
internal abstract void SendAsyncMethod(AsyncMethodData method);
internal override void SendAsyncMethod (AsyncMethodData method) { XEvent xevent = new XEvent (); xevent.type = XEventName.ClientMessage; xevent.ClientMessageEvent.display = DisplayHandle; xevent.ClientMessageEvent.window = FosterParent; xevent.ClientMessageEvent.message_type = (IntPtr)AsyncAtom; xevent.ClientMessageEvent.format = 32; xevent.ClientMessageEvent.ptr1 = (IntPtr) GCHandle.Alloc (method); MessageQueue.EnqueueLocked (xevent); WakeupMain (); }
internal static void SendAsyncMethod (AsyncMethodData data) { #if DriverDebug Console.WriteLine("SendAsyncMethod({0}): Called", data); #endif driver.SendAsyncMethod (data); }
public void SendAsyncMethod (AsyncMethodData method) { X11Hwnd hwnd = (X11Hwnd)Hwnd.ObjectFromHandle(method.Handle); XEvent xevent = new XEvent (); xevent.type = XEventName.ClientMessage; xevent.ClientMessageEvent.display = display; xevent.ClientMessageEvent.window = method.Handle; xevent.ClientMessageEvent.message_type = Atoms.AsyncAtom; xevent.ClientMessageEvent.format = 32; xevent.ClientMessageEvent.ptr1 = (IntPtr) GCHandle.Alloc (method); hwnd.Queue.Enqueue (xevent); }
public IntPtr SendMessage (IntPtr handle, Msg message, IntPtr wParam, IntPtr lParam) { X11Hwnd hwnd = (X11Hwnd)Hwnd.ObjectFromHandle(handle); if (hwnd == null) return IntPtr.Zero; if (hwnd.Queue.Thread != Thread.CurrentThread) { AsyncMethodResult result; AsyncMethodData data; result = new AsyncMethodResult (); data = new AsyncMethodData (); data.Handle = hwnd.Handle; data.Method = new WndProcDelegate (NativeWindow.WndProc); data.Args = new object[] { hwnd.Handle, message, wParam, lParam }; data.Result = result; SendAsyncMethod (data); #if DriverDebug || DriverDebugThreads Console.WriteLine ("Sending {0} message across.", message); #endif return IntPtr.Zero; } else { return NativeWindow.WndProc (hwnd.Handle, message, wParam, lParam); } }
internal static void ExecutionCallback (AsyncMethodData data) { AsyncMethodResult result = data.Result; object ret; try { ret = data.Method.DynamicInvoke (data.Args); } catch (Exception ex) { if (result != null) { result.CompleteWithException (ex); return; } throw; } if (result != null) { result.Complete (ret); } }
internal override void SendAsyncMethod (AsyncMethodData method) { Hwnd hwnd; XEvent xevent = new XEvent (); hwnd = Hwnd.ObjectFromHandle(method.Handle); xevent.type = XEventName.ClientMessage; xevent.ClientMessageEvent.display = DisplayHandle; xevent.ClientMessageEvent.window = method.Handle; xevent.ClientMessageEvent.message_type = (IntPtr)AsyncAtom; xevent.ClientMessageEvent.format = 32; xevent.ClientMessageEvent.ptr1 = (IntPtr) GCHandle.Alloc (method); hwnd.Queue.EnqueueLocked (xevent); WakeupMain (); }
internal static void SendAsyncMethod (AsyncMethodData data) { DriverDebug ("SendAsyncMethod ({0}): Called", data); driver.SendAsyncMethod (data); }
internal override void SendAsyncMethod (AsyncMethodData method) { Win32PostMessage(GetFosterParent(), Msg.WM_ASYNC_MESSAGE, IntPtr.Zero, (IntPtr)GCHandle.Alloc (method)); }
internal override void SendAsyncMethod (AsyncMethodData method) { display.SendAsyncMethod (method); }