Threadingprobleme bei der Benutzeroberflächenautomatisierung
Hinweis |
---|
Diese Dokumentation ist für .NET Framework-Entwickler vorgesehen, die die verwalteten UI Automation-Klassen verwenden möchten, die im System.Windows.Automation-Namespace definiert sind.Aktuelle Informationen zu UI Automation finden Sie unter Windows Automation API: UI Automation. |
Aufgrund der Art und Weise, in der Microsoft UI Automation Windows-Meldungen verwendet, können Konflikte auftreten, wenn eine Clientanwendung versucht, mit der eigenen UI über den UI-Thread zu interagieren. Durch diese Konflikte kann die Leistung erheblich beeinträchtigt werden, möglicherweise wird die Anwendung nicht mehr reagieren.
Wenn die Clientanwendung mit allen Elementen auf dem Desktop interagieren soll, einschließlich der eigenen UI, sollten alle Aufrufe von UI Automation in einem getrennten Thread ausgeführt werden. Dies schließt das Suchen von Elementen (z. B. durch Verwenden der TreeWalker-Methode oder der FindAll-Methode) sowie die Verwendung von Steuerelementmustern ein.
UI Automation-Aufrufe können problemlos innerhalb eines UI Automation-Ereignishandlers ausgeführt werden, da der Ereignishandler stets in einem anderen als dem UI-Thread aufgerufen wird. Beim Abonnieren von Ereignissen, die aus UI der Clientanwendung stammen, muss der Aufruf von AddAutomationEventHandler bzw. einer verwandten Methode jedoch in einem anderen als dem UI-Thread ausgeführt werden. Entfernen Sie Ereignishandler im gleichen Thread.