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