private IUIAutomationElement GetNearbyElement(GetElementDelegate getNextElement) { var currentElement = GetCurrentElement(); if (currentElement == null) { return(null); } var treeWalker = A11yAutomation.GetTreeWalker(this.TreeViewMode); var retVal = getNextElement?.Invoke(treeWalker, currentElement); // make sure that we skip an element from current process while walking tree. // this code should be hit only at App level. but for sure. if (DesktopElement.IsFromCurrentProcess(retVal)) { var tmp = retVal; retVal = getNextElement?.Invoke(treeWalker, retVal); // since element is not in use, release. Marshal.ReleaseComObject(tmp); } Marshal.ReleaseComObject(treeWalker); return(retVal); }