Пример #1
0
        /// <inheritdoc />
        public void Dispose()
        {
            LogTo.Debug("Cleaning up {Name}", GetType().Name);

            _controlGroup?.Dispose();
            SMMainWdwPtr?.Dispose();
            ElementWdwPtr?.Dispose();
            ElementIdPtr?.Dispose();
            CurrentConceptIdPtr?.Dispose();
            CurrentConceptGroupIdPtr?.Dispose();
            CurrentRootIdPtr?.Dispose();
            CurrentHookIdPtr?.Dispose();
            LearningModePtr?.Dispose();

            SMMainWdwPtr             = null;
            ElementWdwPtr            = null;
            ElementIdPtr             = null;
            CurrentConceptIdPtr      = null;
            CurrentConceptGroupIdPtr = null;
            CurrentRootIdPtr         = null;
            CurrentHookIdPtr         = null;
            LearningModePtr          = null;

            LogTo.Debug("Cleaning up {Name}... Done", GetType().Name);
        }
Пример #2
0
        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);
        }