ИР адаптер для периодического обновления структуры управляемой формы в своем кэше использует тяжелую операцию - разбор внутреннего формата формы передаваемого через буфер обмена. Из-за ее тяжести я вынес ее выполнение в фоновый метод. Это сняло часть неудобств. Но т.к. доступ к COM приложению ИР по факту однопоточный, то все запросы к нему из разных потоков Турбоконфа выстраиваются в очередь. Если запустилась эта тяжелая операция и пользователь сразу же нажал ENTER в списке подсказки Т9, то вызванный обработчик события ПриВыбореЗначенияТ9 вызывает COM приложение ИР и встает в ожидание. Понятно, что совсем исключить такую ситуацию невозможно, но зато можно заметно снизить ее вероятность.
Поэтому прошу предоставить способ проверить из фонового потока скрипта
#1, ред. 12 мая 2025 18:49
Используй эти новые свойства, для уменьшения вероятности конфликтов при взаимодействии
6.4.9263.37276
https://disk.yandex.ru/d/XRPUNWQtrbwBUw
// <summary>
/// Возвращает признак того, что в текущий момент TurboConf выполняет процесс взаимодействия с системой.
/// </summary>
[ContextProperty("IsProcess", "ВыполняетсяВзаимодействие")]
[ContextProperty("LastKeyboardDownEventDateTime", "ВремяПоследнегоНажатияКлавишиКлавиатуры")]
[ContextProperty("LastMouseEventDateTime", "ВремяПоследнегоНажатияКнопкиМыши")]
[ContextProperty("IsAnyKeyPushedDown", "НажатаКлавишаКлавиатуры")]
[ContextProperty("IsMouseKeyPushedDown", "НажатаКнопкаМыши")]
[ContextProperty("IsContextMenu", "ОткрытаШтатнаяПодсказка")]
[ContextProperty("IsT9Visible", "ОткрытаПодсказкаT9")]
bolsun изменил статус на Открыто
#2, 12 мая 2025 19:11
Правильно, я понимаю, что функции
Работают независимо от основного потока и потому их можно вызывать в фоне в любой момент?
Если это возможно, опиши кратко принципы, по которым можно отличать такие безопасные функции.
#3, 12 мая 2025 20:03
(1) bolsun, Проверил. Все атрибуты корректно обновляются в том числе при чтении из фонового метода.
#4, 12 мая 2025 20:17
tormozit изменил статус на Закрыто
#5, 12 мая 2025 20:49
(2) tormozit, эти функции обрабатываются через WinAPI, поэтому без разницы в каком потоке они вызываются. Это не приводит к блокировке, в отличие от запросов к UIAutomation 1с.
#6, 12 мая 2025 20:50
(5) bolsun, ясно