Поделиться через


Проблемы потока модели автоматизация пользовательского интерфейса

Примечание.

Эта документация предназначена для разработчиков .NET Framework, желающих использовать управляемые классы автоматизации пользовательского интерфейса, определенные в пространстве имен System.Windows.Automation. Последние сведения об автоматизации пользовательского интерфейса см. в статье API автоматизации Windows. Автоматизация пользовательского интерфейса.

Из-за того, как Microsoft модель автоматизации пользовательского интерфейса использует сообщения Windows, конфликты могут возникать, когда клиентское приложение пытается взаимодействовать с собственным пользовательским интерфейсом в потоке пользовательского интерфейса. Эти конфликты могут привести к значительному снижению производительности или даже к зависанию приложения.

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

Безопасно выполнять вызовы модель автоматизации пользовательского интерфейса в обработчике событий модель автоматизации пользовательского интерфейса, так как обработчик событий всегда вызывается в потоке, отличном от пользовательского интерфейса. Однако при подписке на события, которые могут возникать из пользовательского интерфейса клиентского приложения, необходимо выполнить вызов или AddAutomationEventHandlerсвязанный метод в потоке, отличном от пользовательского интерфейса. Удалите обработчики событий в том же потоке.