Threadingprobleme bei der Benutzeroberflächenautomatisierung

Hinweis

Diese Dokumentation ist für .NET Framework-Entwickler konzipiert, die die verwalteten Klassen zur Automatisierung der Benutzeroberfläche verwenden möchten, die im Namespace System.Windows.Automation definiert sind. Aktuelle Informationen zur Automatisierung der Benutzeroberfläche finden Sie auf der Seite zur Windows-Automatisierungs-API: Benutzeroberflächenautomatisierung.

Aufgrund der Art und Weise, wie die Microsoft-Benutzeroberflächenautomatisierung Windows-Meldungen verwendet, können Konflikte auftreten, wenn eine Clientanwendung versucht, mit der eigenen Benutzeroberfläche über den Benutzeroberflächenthread zu interagieren. Diese Konflikte können dazu führen, dass die Leistung erheblich beeinträchtigt wird, oder sogar dazu, dass die Anwendung gar nicht mehr reagiert.

Wenn die Clientanwendung mit allen Elementen auf dem Desktop interagieren soll, einschließlich der eigenen Benutzeroberfläche, sollten alle Aufrufe der Benutzeroberflächenautomatisierung in einem getrennten Thread erfolgen. Dies schließt das Suchen von Elementen (z. B. durch Verwenden der TreeWalker -Methode oder der FindAll -Methode) sowie die Verwendung von Steuerelementmustern ein.

Aufrufe der Benutzeroberflächenautomatisierung können problemlos innerhalb eines Ereignishandlers für die Benutzeroberflächenautomatisierung ausgeführt werden, da der Ereignishandler stets in einem anderen Nicht-Benutzeroberflächenthread aufgerufen wird. Beim Abonnieren von Ereignissen, die von der Benutzeroberfläche der Clientanwendung stammen können, muss der Aufruf von AddAutomationEventHandler bzw. einer verwandten Methode jedoch in einem Nicht-Benutzeroberflächenthread erfolgen. Entfernen Sie Ereignishandler im gleichen Thread.