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; }
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; }
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; }
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; }