Freigeben über


Zwischenspeichern in Benutzeroberflächenautomatisierungs-Clients

Hinweis

Diese Dokumentation richtet sich an .NET Framework-Entwickler, die die verwalteten Benutzeroberflächenautomatisierungs-Klassen verwenden möchten, die im System.Windows.Automation-Namespace definiert sind. Die neuesten Informationen zur Benutzeroberflächenautomatisierung finden Sie unter Windows Automation API: Benutzeroberflächenautomatisierung.

In diesem Thema wird das Zwischenspeichern von Eigenschaften und Steuerelementmustern der Benutzeroberflächenautomatisierung eingeführt.

Bei der Benutzeroberflächenautomatisierung bedeutet Zwischenspeichern, dass Daten vorab abgerufen werden. Auf die Daten kann dann ohne weitere prozessübergreifende Kommunikation zugegriffen werden. Das Zwischenspeichern wird in der Regel von Clientanwendungen für die Benutzeroberflächenautomatisierung verwendet, um Eigenschaften und Steuerelementmuster in Massen abzurufen. Informationen werden dann nach Bedarf aus dem Cache abgerufen. Die Anwendung aktualisiert den Cache regelmäßig, in der Regel als Reaktion auf Ereignisse, die signalisieren, dass sich etwas in der Benutzeroberfläche geändert hat.

Die Vorteile der Zwischenspeicherung sind bei Windows Presentation Foundation (WPF)-Steuerelementen und benutzerdefinierten Steuerelementen mit serverseitigen Benutzeroberflächenautomatisierungs-Anbietern am deutlichsten. Es gibt weniger Vorteile beim Zugriff auf clientseitige Anbieter wie die Standardanbieter für Win32-Steuerelemente.

Zwischenspeichern tritt auf, wenn die Anwendung einen CacheRequest aktiviert und dann eine beliebige Methode oder Eigenschaft verwendet, die ein AutomationElement zurückgibt; z. B. FindFirst, FindAll. Die Methoden der TreeWalker Klasse sind eine Ausnahme. Das Zwischenspeichern erfolgt nur, wenn ein CacheRequest Parameter als Parameter angegeben wird (z. B TreeWalker.GetFirstChild(AutomationElement, CacheRequest). .

Zwischenspeichern erfolgt auch, wenn Sie ein Ereignis abonnieren, während ein CacheRequest aktiv ist. Der AutomationElement, der als Quelle eines Ereignisses an Ihren Ereignishandler übergeben wird, enthält die zwischengespeicherten Eigenschaften und Muster, die vom Original CacheRequest angegeben werden. Alle Änderungen, die an dem CacheRequest Ereignis vorgenommen wurden, nachdem Sie das Ereignis abonniert haben, haben keine Auswirkungen.

Die Eigenschaften und Steuerelementmuster eines Elements für die Benutzeroberflächenautomatisierung können zwischengespeichert werden.

Optionen für das Zwischenspeichern

Die CacheRequest gibt die folgenden Optionen für das Caching an.

Eigenschaften, die zwischengespeichert werden sollen

Sie können Eigenschaften angeben, die zwischengespeichert werden sollen, indem Sie jede Eigenschaft aufrufen Add(AutomationProperty) , bevor Sie die Anforderung aktivieren.

Steuerelementmuster, die zwischengespeichert werden sollen

Sie können Steuerelementmuster angeben, die zwischengespeichert werden sollen, indem Sie jedes Muster aufrufen Add(AutomationPattern) , bevor Sie die Anforderung aktivieren. Wenn ein Muster zwischengespeichert wird, werden seine Eigenschaften nicht automatisch zwischengespeichert. Sie müssen die Eigenschaften angeben, die zwischengespeichert werden sollen.CacheRequest.Add

Umfang und Filterung der Zwischenspeicherung

Sie können die Elemente angeben, deren Eigenschaften und Muster Sie zwischenspeichern möchten, indem Sie die CacheRequest.TreeScope Eigenschaft festlegen, bevor Sie die Anforderung aktivieren. Der Bereich ist relativ zu den Elementen, die abgerufen werden, während die Anforderung aktiv ist. Wenn Sie z. B. nur Children festlegen und dann eine AutomationElement abrufen, werden die Eigenschaften und Muster untergeordneter Elemente dieses Elements zwischengespeichert, aber nicht die Eigenschaften des Elements selbst. Um sicherzustellen, dass das Zwischenspeichern für das abgerufene Element selbst erfolgt, müssen Sie Element in der TreeScope Eigenschaft einschließen. Es ist nicht möglich, den Umfang auf Parent oder Ancestors festzulegen. Ein übergeordnetes Element kann jedoch zwischengespeichert werden, wenn ein untergeordnetes Element zwischengespeichert wird. Weitere Informationen finden Sie unter Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen.

Der Umfang eines Zwischenspeicherns wird auch von der CacheRequest.TreeFilter -Eigenschaft beeinflusst. Standardmäßig wird das Zwischenspeichern nur für Elemente ausgeführt, die in der Steuerelementansicht der Benutzeroberflächenautomatisierungs-Struktur angezeigt werden. Sie können diese Eigenschaft jedoch ändern, um zwischenspeichern auf alle Elemente oder nur auf Elemente anzuwenden, die in der Inhaltsansicht angezeigt werden.

Stärke der Elementverweise

Beim Abrufen eines AutomationElement, standardmäßig haben Sie Zugriff auf alle Eigenschaften und Muster dieses Elements, einschließlich derjenigen, die nicht zwischengespeichert wurden. Für eine höhere Effizienz können Sie jedoch angeben, dass sich der Verweis auf das Element nur auf zwischengespeicherte Daten bezieht, indem Sie die AutomationElementMode-Eigenschaft von CacheRequest auf None festlegen. In diesem Fall haben Sie keinen Zugriff auf nicht zwischengespeicherte Eigenschaften und Muster von abgerufenen Elementen. Dies bedeutet, dass Sie auf keinerlei Eigenschaften über GetCurrentPropertyValue oder die Current-Eigenschaft von AutomationElement oder irgendeinem Steuerelementmuster zugreifen können; ebenso wenig können Sie ein Muster mithilfe von GetCurrentPattern oder TryGetCurrentPattern abrufen. Bei zwischengespeicherten Mustern können Sie Methoden aufrufen, die Arrayeigenschaften abrufen, wie z. B. SelectionPattern.SelectionPatternInformation.GetSelection, aber keine Methoden, die Aktionen auf das Steuerelement ausführen, wie z. B. InvokePattern.Invoke.

Ein Beispiel für eine Anwendung, die möglicherweise keine vollständigen Verweise auf Objekte benötigt, ist eine Bildschirmsprachausgabe, die die Name Eigenschaften und ControlType Eigenschaften von Elementen in einem Fenster vorab ausrufen würde, aber die AutomationElement Objekte selbst nicht benötigt.

Aktivieren der CacheRequest

Zwischenspeichern wird nur ausgeführt, wenn AutomationElement Objekte abgerufen werden, während ein CacheRequest für den aktuellen Thread aktiv ist. Es gibt zwei Möglichkeiten zum Aktivieren eines CacheRequest.

Die übliche Möglichkeit besteht darin, zu anrufen Activate. Diese Methode gibt ein Objekt zurück, das IDisposable implementiert. Die Anforderung bleibt aktiv, solange das IDisposable Objekt vorhanden ist. Die einfachste Möglichkeit zum Steuern der Lebensdauer des Objekts besteht darin, den Aufruf in einen using (C#)- oder Using (Visual Basic)-Block einzuschließen. Dadurch wird sichergestellt, dass die Anforderung selbst dann aus dem Stapel entfernt wird, wenn eine Ausnahme ausgelöst wird.

Eine weitere Möglichkeit, die nützlich ist, wenn Sie Cacheanforderungen verschachteln möchten, ist das Aufrufen Push. Dadurch wird die Anforderung in einen Stapel versetzt und aktiviert. Die Anforderung bleibt aktiv, bis sie von Pop vom Stapel entfernt wird. Die Anforderung wird vorübergehend inaktiv, wenn eine andere Anforderung auf den Stapel verschoben wird; nur die oberste Anforderung im Stapel ist aktiv.

Abrufen von zwischengespeicherten Eigenschaften

Sie können die zwischengespeicherten Eigenschaften eines Elements über die folgenden Methoden und Eigenschaften abrufen.

Wenn sich die angeforderte Eigenschaft nicht im Cache befindet, wird eine Ausnahme ausgelöst.

Cached, wie Current, macht einzelne Eigenschaften als Member einer Struktur verfügbar. Sie müssen diese Struktur jedoch nicht abrufen. Sie können direkt auf die einzelnen Eigenschaften zugreifen. Die Eigenschaft Name kann z. B. aus element.Cached.Name abgerufen werden, wobei es sich bei element um eine AutomationElement handelt.

Abrufen von zwischengespeicherten Steuerelementmustern

Sie können die zwischengespeicherten Steuerelementmuster eines Elements über die folgenden Methoden abrufen.

Wenn sich das Muster nicht im Cache befindet, GetCachedPattern löst eine Ausnahme aus und TryGetCachedPattern gibt diese zurück false.

Sie können die zwischengespeicherten Eigenschaften eines Steuerelementmusters mithilfe der Cached Eigenschaft des Musterobjekts abrufen. Außerdem können Sie über die Current -Eigenschaft die aktuellen Werte abrufen, dies jedoch nur, wenn beim Abrufen von None die Option AutomationElement angegeben wurde. (Full ist der Standardwert, und dies ermöglicht den Zugriff auf die aktuellen Werte.)

Abrufen von zwischengespeicherten untergeordneten und übergeordneten Elementen

Wenn Sie ein AutomationElement-Element abrufen und eine Zwischenspeicherung für untergeordnete Elemente dieses Elements über die TreeScope-Eigenschaft der Anforderung anfordern, ist es anschließend möglich, die untergeordneten Elemente aus der CachedChildren-Eigenschaft des abgerufenen Elements zu erhalten.

Wenn Element im Umfang der Cacheanforderung enthalten war, ist das Stammelement der Anforderung anschließend in der CachedParent Eigenschaft eines der untergeordneten Elemente verfügbar.

Hinweis

Sie können keine übergeordneten Elemente des Stammelements der Anforderung zwischenspeichern.

Aktualisieren des Caches

Der Cache ist nur gültig, solange sich nichts in der Benutzeroberfläche ändert. Ihre Anwendung ist für die Aktualisierung des Caches verantwortlich, in der Regel als Reaktion auf Ereignisse.

Wenn Sie ein Ereignis abonnieren, während ein CacheRequest aktiv ist, erhalten Sie einen AutomationElement mit einem aktualisierten Cache als Quelle des Ereignisses, wann immer Ihr Ereignishandler-Delegat aufgerufen wird. Sie können auch zwischengespeicherte Informationen für ein Element aktualisieren, indem Sie das Element aufrufen GetUpdatedCache. Sie können das Original CacheRequest übergeben, um alle Informationen zu aktualisieren, die zuvor zwischengespeichert wurden.

Durch das Aktualisieren des Caches werden die Eigenschaften vorhandener AutomationElement Verweise nicht geändert.

Siehe auch