6. ТурбоКонф.ПолучитьRuntimeId(): Время ожидания операции истекло

tormozit Закрыто Средний

Возникает примерно через раз при выполнении команды "Перейти к определению" ИР адаптера.

ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 639 / Внешнее исключение (System.Runtime.InteropServices.COMException): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)}
СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
---> System.Runtime.InteropServices.COMException: Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
в UIAutomationClient.IUIAutomation.GetFocusedElement()
в TurboConf.Core.TurboAPI.TurboApi.GetCurrentElementRuntimeId(Int32 parentLevels)
в TurboConf.HostApplication.Api.GetCurrentElementRuntimeId()
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, IVariable[] parameters, ScriptOptions options)

Ссылка скрыта

Комментарии

bolsun
#1, ред. 19 ноября 2023 18:32

Как это воспроизвести? Пробовал вызывать несколько раз, не воспроизводится.


tormozit
#2, 19 ноября 2023 19:14

Стабильного воспроизведения не выявил. Возникает эта ошибка иногда. Раньше она возникала чаще (до того, как ты увеличил макс. время ожидания).


bolsun
#3, ред. 19 ноября 2023 19:21

(2) tormozit, попробуй выгрузить настройки в файл. В нем увеличить параметр
UIAutomationConnectionTimeout до 4000, загрузить снова и поработать, будет ли дальше возникать эта ошибка.


bolsun
#4, 21 ноября 2023 23:33

С настройками UIAutomationConnectionTimeout 4000 мс проблема повторяется?
bolsun изменил статус на На выяснении


tormozit
#5, ред. 22 ноября 2023 00:39

UIAutomationConnectionTimeout не менял, т.к. значение 4000 мс показалось выходит за разумные рамки. Проблема пока больше не возникала, но возможно заслонена другими проблемами.


bolsun
#6, 22 ноября 2023 00:43

Это нормальное значение, когда платформа занята и не отвечает. Раньше значение параметра было - бесконечность.


bolsun
#7, 22 ноября 2023 00:44

Но раз проблемы больше нет, то пока тикет закрываю
bolsun изменил статус на Закрыто


tormozit
#8, ред. 25 ноября 2023 23:20

Сегодня ошибка возникала уже 2 раза в той же ситуации. При этом платформа не подвисала.
Попробовал еще 2 раза подряд. Ошибка повторяется. На 3-й раз удалось выполнить команду без ошибки.

ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 651 / Внешнее исключение (System.Runtime.InteropServices.COMException): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)}
СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
---> System.Runtime.InteropServices.COMException: Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
в UIAutomationClient.IUIAutomation.GetFocusedElement()
в TurboConf.Core.TurboAPI.TurboApi.GetCurrentElementRuntimeId(Int32 parentLevels)
в TurboConf.HostApplication.Api.GetCurrentElementRuntimeId()
в lambda_method(Closure , Api , IValue[] )
в ScriptEngine.Machine.Contexts.AutoContext`1.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters)

Ссылка скрыта
tormozit изменил статус на Открыто


bolsun
#9, ред. 25 ноября 2023 23:30

(8) tormozit, в строке 651 на которую указывает ошибка опять вижу неправильную последовательность получения RuntimeId, которую по какой-то причине ты никак не хочешь поменять.

ТурбоКонф.Клавиша(Клавиши.Enter);
СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
Окно = ТурбоКонф.ЖдатьОкно("Точки останова", 2000, Истина);

Еще раз обращаю внимание, что в момент нажатия Enter окно (а это диалог Windows) перестает существовать.
bolsun изменил статус на На выяснении


tormozit
#10, ред. 25 ноября 2023 23:38

Тогда мне непонятна логика использования тобой этого идентификатора. Поэтому я пока отключу их получение.
Раньше я считал что ты по его изменению определяешь смену фокуса ввода. Поэтому я получал его в самый последний момент перед открытием нового окна.


bolsun
#11, ред. 25 ноября 2023 23:44

ТурбоКонф.Клавиша(Клавиши.Enter);  // - уже пошел вызов нового окна
СтарыйИД = ТурбоКонф.ПолучитьRuntimeId(); // - это уже не старый идентификатор. В это время платформа занята открытием окна.
Окно = ТурбоКонф.ЖдатьОкно("Точки останова", 2000, Истина);


bolsun
#12, 25 ноября 2023 23:42

Просто нужно поменять местами


СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
ТурбоКонф.Клавиша(Клавиши.Enter);


bolsun
#13, 25 ноября 2023 23:45

Вот здесь правильно сделано

СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
ТурбоКонф.КонтролКлавиша(Клавиши.s);
Окно = ТурбоКонф.ЖдатьОкно("Сохранить точки останова в файл", 1000, Истина);
Если Окно = 0 Тогда
	Возврат "";
КонецЕсли;


bolsun
#14, 25 ноября 2023 23:49

Но дальше опять же закомментировано
// ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Истина);

Так что смысла в этом СтарыйИД = ТурбоКонф.ПолучитьRuntimeId();
не было.


bolsun
#15, ред. 25 ноября 2023 23:51

Как вариант убери просто все ТурбоКонф.ПолучитьRuntimeId();
и добавь

Окно = ТурбоКонф.ЖдатьОкно("Точки останова", 2000, Истина);
ТурбоКонф.Ждать(100);

Чтобы фокус установился в поле.


bolsun
#16, ред. 25 ноября 2023 23:57

А вообще мы вроде забыли с чего все началось, и зачем вообще понадобилось ТурбоКонф.ПолучитьRuntimeId();

Предлагаю их убрать в этих местах, и увеличить время таймаута установки соединения с 2000 до 4000 мс как я писал в одном из тикетов.


bolsun
#17, 25 ноября 2023 23:56

Открытие диалога сохранения или загрузки вполне может выскочить за этот лимит.


bolsun
#18, 01 декабря 2023 17:23

Проблема актуальна в текущей версии и с учетом рекомендаций?


bolsun
#19, 03 декабря 2023 22:41

bolsun изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера