public override void Post(SendOrPostCallback d, object?state)
        {
            if (d == null)
            {
                throw new ArgumentNullException(nameof(d));
            }

            var data   = new InvokeState(d, state);
            var handle = GCHandle.Alloc(data, GCHandleType.Normal);

            Dispatch.AsyncFunction(Dispatch.MainQueue, GCHandle.ToIntPtr(handle), InvokeCallback);
        }
Пример #2
0
        public override void Post(SendOrPostCallback d, object state)
        {
            if (d == null)
            {
                throw new ArgumentNullException(nameof(d));
            }

            var data   = new InvokeState(d, state, false);
            var handle = GCHandle.Alloc(data, GCHandleType.Normal);

            GLib.ContextInvoke(IntPtr.Zero, InvokeCallback, GCHandle.ToIntPtr(handle));
        }
Пример #3
0
        public override void Send(SendOrPostCallback d, object state)
        {
            if (d == null)
            {
                throw new ArgumentNullException(nameof(d));
            }

            if (IsMainThread)
            {
                d(state);
            }
            else
            {
                var data   = new InvokeState(d, state, true);
                var handle = GCHandle.Alloc(data, GCHandleType.Normal);

                lock (data)
                {
                    GLib.ContextInvoke(IntPtr.Zero, InvokeCallback, GCHandle.ToIntPtr(handle));
                    Monitor.Wait(data);
                }
            }
        }
 protected override object OnInvoke(object target, PomonaContext context, InvokeState state)
 {
     state.Form = context.Bind(this.formParameter.TypeSpec);
     return(base.OnInvoke(target, context, state));
 }
 protected override object OnGetArgument(HandlerParameter parameter, PomonaContext context, InvokeState state)
 {
     if (parameter == this.targetResourceParameter)
     {
         return(context.Node.Value);
     }
     if (parameter == this.formParameter)
     {
         return(state.Form);
     }
     return(base.OnGetArgument(parameter, context, state));
 }