Example #1
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();
            }
        }
Example #2
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);
            }
        }
Example #3
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);
		}
Example #4
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);
			}
		}
Example #5
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;
		}
		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;
		}