protected bool OnElementChangedInternal(int newElementId) { if (newElementId <= 0) { return(false); } try { _controlGroup?.Dispose(); _controlGroup = null; DateTime startTime = DateTime.Now; IElement lastElement = null, currentElement = null; do { if (LastElementId > 0 && lastElement == null) { lastElement = SMA.SMA.Instance.Registry.Element[LastElementId]; } if (currentElement == null) { currentElement = ElementRegistry.Instance[newElementId]; } } while ((DateTime.Now - startTime).TotalMilliseconds < 800 && (LastElementId > 0 && lastElement == null || currentElement == null)); LastElementId = newElementId; OnElementChanged?.InvokeRemote( nameof(OnElementChanged), new SMDisplayedElementChangedArgs(SMA.SMA.Instance, currentElement, lastElement), h => OnElementChanged -= h ); } catch (Exception ex) { LogTo.Error(ex, "Error while notifying OnElementChanged"); } return(false); }
private void ChangeElement(int index, BaseListElementData data) { var oldData = m_elementsData[index]; if (oldData == data) { return; } m_elementsData[index] = data; oldData.OnSelectionChanged -= SelectionChangeHandler; oldData.OnClick -= ClickHandler; data.OnSelectionChanged += SelectionChangeHandler; data.OnClick += ClickHandler; OnElementChanged.Call(index, data); }