Целевой элемент соответствует пользовательскому интерфейсу, который больше не доступен.

AE_ComboBox = uia.GetElementByControlTypeAndAutomationId(globalSettings, ControlType.ComboBox, "1");
AE_TargetValue = uia.GetElement(AE_ComboBox, value, true);
SelectionItemPattern SIP = AE_TargetValue.GetCurrentPattern(SelectionItemPattern.Pattern) as SelectionItemPattern;
SIP.Select();
Thread.Sleep(2000);
SIP.Current.IsSelected

Этот код выдает исключение в последней строке.

Целевой элемент соответствует пользовательскому интерфейсу, который больше недоступен (например, родительское окно закрылось).
в MS.Internal.AutomationProxies.Misc.ThrowWin32ExceptionsIfError(Int32 errorCode)
в MS.Internal.AutomationProxies.Misc .ProxySendMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
в MS.Internal.AutomationProxies.WindowsListBox.ListboxItem.System.Windows.Automation.Provider.ISelectionItemProvider.get_IsSelected()

Итак, в чем тут может быть дело?

Кроме того, еще вопрос, что означает «текущий» в SelectionItemPattern? (Я уверен, что это не означает текущий выбранный элемент.)


person user1947415    schedule 04.04.2016    source источник


Ответы (2)


Я также столкнулся с той же проблемой. Я получал элемент автоматизации в одной строке и обращался к нему через свойство Current во второй строке. Текущее свойство снова переходит к процессу целевого приложения, чтобы получить значение при доступе. Таким образом, во время этого вызова перекрестного процесса, если ваш элемент пользовательского интерфейса больше не доступен, возникает это исключение. Даже если у вас есть объект AutomationElement, он будет недействительным.

Если вы просто хотите получить значение, вы можете попробовать использовать CacheRequet, а затем использовать свойство Cached объекта AutomationELement.

person Sanjay    schedule 01.06.2016

Если вы используете WPR, а комбинация еще не инициализирована, обычно чтение элементов из базы данных занимает много времени, и при доступе к комбинации вы получаете это исключение. Итак, вам нужно дождаться, пока комбо будет инициализировано в цикле (и, возможно, спать)

person AdlerBalduran    schedule 13.12.2019