/// <summary>process a dot net event.</summary> /// <param name="sender">the object from which the event was raised.</param> /// <param name="mgControl">an (optional) control for which the variable was selected. /// if null, the invoked object is not a control on a form.</param> /// <param name="eventName"></param> /// <param name="parameters">parameters passed to the event handler.</param> internal void ProcessDotNetEvent(Object sender, GuiMgControl mgControl, String eventName, object[] parameters) { if (mgControl != null) { var rtEvt = new RunTimeEvent((MgControl)mgControl, 0, true); rtEvt.setDotNet(eventName); rtEvt.DotNetArgs = parameters; ClientManager.Instance.EventsManager.addToTail(rtEvt); } else //.net events on objects that are not controls and not connected to any task { //QCR #926669 , For sibling tasks, events order will be random. But when there is hierarchy, the lower task in the subtask tree should be performed first. List <Task> tasks = ClientManager.Instance.getTasksByObject(sender); tasks.Sort(ClientManager.CompareByDepth); foreach (Task item in tasks) { var rtEvt = new RunTimeEvent(item, true); rtEvt.setDotNet(eventName); rtEvt.DotNetObject = sender; rtEvt.DotNetArgs = parameters; ClientManager.Instance.EventsManager.addToTail(rtEvt); } } }