Ejemplo n.º 1
0
        /// <summary>
        /// *SLOW* Perform the actual call here to the target control object.
        /// Control calls are more complex, since they get executed on the control's
        /// Invoke() thread, and to do this, we need the actual delegate instance.
        /// </summary>
        protected object CallControlInvoke(Control target, out Exception exception)
        {
            if (Matrix.Framework.SuperPool.Core.SuperPool.CallContextEnabled)
            {
                SuperPoolCallContext.CurrentCall = this;
            }

            object result = null;

            exception = null;

            try
            {
                ControlInvokeDelegate delegateInstance =
                    delegate(MethodInfo methodInfo, Control controlTarget, object[] parameters)
                {
                    return(FastInvokeHelper.CachedInvoke(methodInfo, controlTarget, parameters));
                };

                // Synchronously perform the invocation.
                result = target.Invoke(delegateInstance, new object[] { MethodInfoLocal, target, Parameters });
            }
            catch (Exception ex)
            {
                exception = ex;
            }

            if (Matrix.Framework.SuperPool.Core.SuperPool.CallContextEnabled)
            {
                SuperPoolCallContext.CurrentCall = null;
            }

            return(result);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// ��UI�߳���ͬ������ί�С�
 /// </summary>
 /// <param name="control"></param>
 /// <param name="invokeDelegate"></param>
 /// <param name="args"></param>
 /// <returns></returns>
 public object InvokeControlDelegate(Control control, ControlInvokeDelegate invokeDelegate, object[] args)
 {
     AsyncControlDelegateInvoker invoker = new AsyncControlDelegateInvoker();
     invoker.Blocking = true;
     invoker.Control = control;
     invoker.Args = args;
     invoker.InvokeDelegate = invokeDelegate;
     invoker.Execute();
     return invoker.Result;
 }
Ejemplo n.º 3
0
 /// <summary>
 /// ��UI�߳��첽����ί�С�
 /// </summary>
 /// <param name="control"></param>
 /// <param name="invokeDelegate"></param>
 /// <param name="args"></param>
 /// <returns></returns>
 public IAsyncResult BeginInvokeControlDelegate(Control control, ControlInvokeDelegate invokeDelegate, object[] args)
 {
     AsyncControlDelegateInvoker invoker = new AsyncControlDelegateInvoker();
     invoker.Blocking = false;
     invoker.Control = control;
     invoker.Args = args;
     invoker.InvokeDelegate = invokeDelegate;
     invoker.Execute();
     return invoker.State;
 }