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);
        }
Esempio n. 2
0
        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);
        }