Ejemplo n.º 1
0
 internal static void SendAsyncMethod(AsyncMethodData data)
 {
                 #if DriverDebug
     Console.WriteLine("SendAsyncMethod({0}): Called", data);
                 #endif
     driver.SendAsyncMethod(data);
 }
Ejemplo n.º 2
0
        // 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();
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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();
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
 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));
			}
		}
Ejemplo n.º 9
0
		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;
		}
Ejemplo n.º 10
0
		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;
		}
Ejemplo n.º 11
0
		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);
		}
Ejemplo n.º 12
0
 internal static void SendAsyncMethod(AsyncMethodData data)
 {
     DriverDebug("SendAsyncMethod ({0}): Called", data);
     driver.SendAsyncMethod(data);
 }
Ejemplo n.º 13
0
 internal abstract void SendAsyncMethod(AsyncMethodData method);
Ejemplo n.º 14
0
		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 ();
		}
Ejemplo n.º 15
0
		internal static void SendAsyncMethod (AsyncMethodData data) {
			#if DriverDebug
				Console.WriteLine("SendAsyncMethod({0}): Called", data);
			#endif
			driver.SendAsyncMethod (data);
		}
Ejemplo n.º 16
0
		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);
		}
Ejemplo n.º 17
0
		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);
			}
		}
Ejemplo n.º 18
0
		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);
			}
		}
Ejemplo n.º 19
0
		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 ();
		}
Ejemplo n.º 20
0
		internal static void SendAsyncMethod (AsyncMethodData data)
		{
			DriverDebug ("SendAsyncMethod ({0}): Called", data);
			driver.SendAsyncMethod (data);
		}
Ejemplo n.º 21
0
		internal override void SendAsyncMethod (AsyncMethodData method)
		{
			Win32PostMessage(GetFosterParent(), Msg.WM_ASYNC_MESSAGE, IntPtr.Zero, (IntPtr)GCHandle.Alloc (method));
		}
Ejemplo n.º 22
0
		internal override void SendAsyncMethod (AsyncMethodData method)
		{
			display.SendAsyncMethod (method);
		}