Общие сведения о проблемах с потоком
В этом разделе описываются распространенные сценарии потоков для реализации клиентов Microsoft модель автоматизации пользовательского интерфейса и объясняется, как избежать проблем, которые могут возникнуть, если клиент неправильно использует потоки.
Этот раздел состоит из следующих подразделов.
- модель автоматизации пользовательского интерфейса и поток пользовательского интерфейса
- Модель потоков для обработчиков событий
- Сходство квартир COM в 64-разрядной версии Windows
- Связанные статьи
модель автоматизации пользовательского интерфейса и поток пользовательского интерфейса
Из-за того, как модель автоматизации пользовательского интерфейса использует сообщения Windows, конфликты могут возникать, когда клиентское приложение пытается взаимодействовать с собственным пользовательским интерфейсом в потоке пользовательского интерфейса. Эти конфликты могут привести к очень медленной производительности или даже привести к тому, что приложение перестанет отвечать.
Если клиентское приложение предназначено для взаимодействия со всеми элементами на рабочем столе, включая собственный пользовательский интерфейс, необходимо сделать все модель автоматизации пользовательского интерфейса вызовы из отдельного потока. Это включает поиск элементов, например с помощью метода IUIAutomationTreeWalker или метода IUIAutomationElement::FindAll и использования шаблонов элементов управления. Этот поток не должен принадлежать каким-либо окнам и должен быть потоком многопоточной многопоточной модели квартиры (MTA), который инициализирует COM путем вызова CoInitializeEx с флагом COINIT_MULTITHREADED .)
Безопасно выполнять вызовы модель автоматизации пользовательского интерфейса в обработчике событий модель автоматизации пользовательского интерфейса, так как обработчик событий всегда вызывается в потоке, отличном от пользовательского интерфейса. Однако при подписке на события, которые могут возникать из пользовательского интерфейса клиентского приложения, необходимо выполнить вызов IUIAutomation ::AddAutomationEventHandler или связанный метод в потоке, отличном от пользовательского интерфейса (который также должен быть потоком MTA). Удалите обработчики событий в том же потоке.
Клиент модель автоматизации пользовательского интерфейса не должен использовать несколько потоков для добавления или удаления обработчиков событий. Непредвиденное поведение может привести к добавлению или удалению одного обработчика событий при добавлении или удалении другого в одном процессе клиента.
Модель потоков для обработчиков событий
Клиент модель автоматизации пользовательского интерфейса должен использовать модель потоков COM MTA для потоков, реализующих обработчики событий. Использование модели single-threaded Apartment (STA) может привести к проблемам, таким как запрет клиентам удалять обработчики событий из потока.
Сходство квартир COM в 64-разрядной версии Windows
Согласно спецификации COM, время существования удаленного объекта регулируется временем существования квартиры, в которой вызывается функция CoCreateInstance для создания объекта. Когда исходная квартира завершает работу, удаленный объект также освобождается.
Для клиентов модель автоматизации пользовательского интерфейса это поведение COM может означать, что время существования удаленного вспомогательного средства 32/64 (созданного UIAutomationCore.dll), используемого 32-разрядным элементом, управляется временем существования потока, создавшего элемент. Если клиент модель автоматизации пользовательского интерфейса маршалирует элемент в другой поток, элемент может стать недействительным при завершении работы исходной квартиры. Клиент модель автоматизации пользовательского интерфейса должен корректно обрабатывать эти проблемы путем перехвата ошибок при использовании маршалированных элементов автоматизации.
Эта же проблема может возникать с 32-разрядным клиентом модель автоматизации пользовательского интерфейса с 64-разрядными элементами.
См. также
Основные понятия.
Получение элементов модели автоматизации пользовательского интерфейса
Подписка на события модель автоматизации пользовательского интерфейса
Общие сведения о событиях модели автоматизации пользовательского интерфейса
Другие ресурсы: