예제 #1
0
        public void ValueChanged(Control sourceControl, ServerProcessCompleted eventHandler)
        {
            if (sourceControl == null)
            {
                return;
            }


            ServerProcessEventArgs request = new ServerProcessEventArgs();

            request.RequestType = ServerProcessRequestType.ValueChanged;

            request.SourceControl = sourceControl;

            request.Completed += new ServerProcessCompleted(eventHandler);


            lock (serverProcessQueueSyncRoot) {
                serverProcessQueue.Enqueue(request);
            }

            ProcessServerQueue();

            return;
        }
예제 #2
0
        public void RaiseEvent(Control eventControl, String eventName, ServerProcessCompleted eventHandler)
        {
            if (eventControl == null)
            {
                return;
            }


            ServerProcessEventArgs request = new ServerProcessEventArgs();

            request.RequestType = ServerProcessRequestType.RaiseEvent;

            request.SourceControl = eventControl;

            request.EventName = eventName;

            request.Completed += new ServerProcessCompleted(eventHandler);


            lock (serverProcessQueueSyncRoot) {
                serverProcessQueue.Enqueue(request);
            }

            ProcessServerQueue();

            return;
        }
예제 #3
0
        private void RaiseEventCompleted(Object sender, Server.Application.FormControl_RaiseEventCompletedEventArgs e)
        {
            ServerProcessEventArgs request = null;

            lock (serverProcessQueueSyncRoot) {
                request = serverProcessQueue.Dequeue();
            }

            if (request != null)
            {
                request.ProcessEndTime = DateTime.Now;

                System.Diagnostics.Debug.WriteLine("Form Process: " + DateTime.Now.Subtract(request.ProcessStartTime).Milliseconds.ToString());
            }

            if ((!e.Cancelled) && (e.Error == null) && (e.Result != null))
            {
                if (!e.Result.HasException)
                {
                    DateTime updateStartTime = DateTime.Now;

                    UpdateControl(e.Result.Form);

                    System.Diagnostics.Debug.WriteLine("Form Update Controls: " + DateTime.Now.Subtract(updateStartTime).Milliseconds.ToString());
                }
            }


            if (request != null)
            {
                if (request.Completed != null)
                {
                    request.Completed(this, request);
                }
            }

            isServerProcessing = false;

            ProcessServerQueue();

            return;
        }
예제 #4
0
        private void ProcessServerQueue()
        {
            if (isServerProcessing)
            {
                return;
            }

            if (serverProcessQueue.Count == 0)
            {
                return;
            }


            isServerProcessing = true; // MARK PROCESSING FOR SINGLE THREADING

            ServerProcessEventArgs request = null;

            Boolean cancelProcessing = false;

            lock (serverProcessQueueSyncRoot) {
                request = serverProcessQueue.Peek();   // PEEK TO RETREIVE NEXT QUEUE ITEM FOR PROCESS (COMPLETION DEQUEUES THE ITEM)
            }

            if (request != null)
            {
                switch (request.RequestType)
                {
                case ServerProcessRequestType.RaiseEvent:

                    if (request.SourceControl.HasEventHandler(request.EventName))
                    {
                        request.ProcessStartTime = DateTime.Now;

                        Application.FormControl_RaiseEvent((Server.Application.Form) this.ToServerObject(), request.SourceControl.ControlId, request.EventName, RaiseEventCompleted);
                    }

                    else
                    {
                        cancelProcessing = true;
                    }

                    break;

                case ServerProcessRequestType.ValueChanged:

                    if ((eventHandlers.Count > 0) || (HasDependencyDataBinding))
                    {
                        request.ProcessStartTime = DateTime.Now;

                        Application.FormControl_ValueChanged((Server.Application.Form) this.ToServerObject(), request.SourceControl.ControlId, ValueChangedCompleted);
                    }

                    else
                    {
                        cancelProcessing = true;
                    }

                    break;

                default: cancelProcessing = true; break;
                }
            }

            else
            {
                cancelProcessing = true;
            }



            if (cancelProcessing)
            {
                lock (serverProcessQueueSyncRoot) {
                    request = serverProcessQueue.Dequeue();

                    isServerProcessing = false;
                }
            }


            if (!isServerProcessing)
            {
                ProcessServerQueue();
            }

            return;
        }