Delen via


Caching voor UI-automatiseringsclients

Opmerking

Deze documentatie is bedoeld voor .NET Framework-ontwikkelaars die de beheerde UI Automation-klassen willen gebruiken die zijn gedefinieerd in de System.Windows.Automation naamruimte. Zie Windows Automation-API: UI Automationvoor de meest recente informatie over UI Automation.

In dit onderwerp vindt u informatie over het opslaan in cache van eigenschappen en besturingspatronen van UI Automation.

In UI Automation betekent caching het vooraf ophalen van gegevens. De gegevens kunnen vervolgens worden geopend zonder verdere communicatie tussen processen. Caching wordt doorgaans gebruikt door UI Automation-clienttoepassingen om eigenschappen op te halen en patronen bulksgewijs te beheren. Informatie wordt vervolgens zo nodig opgehaald uit de cache. De toepassing werkt de cache periodiek bij, meestal in reactie op gebeurtenissen die erop duiden dat iets in de gebruikersinterface (UI) is gewijzigd.

De voordelen van caching zijn het meest merkbaar met WPF-besturingselementen (Windows Presentation Foundation) en aangepaste besturingselementen met UI Automation-providers aan de serverzijde. Het is minder voordelig bij het gebruik van client-side providers, zoals de standaardproviders voor Win32-besturingselementen.

nl-NL: Caching vindt plaats wanneer de toepassing een CacheRequest activeert en vervolgens een methode of eigenschap gebruikt die een AutomationElement retourneert; bijvoorbeeld, FindFirst, FindAll. De methoden van de TreeWalker klasse zijn een uitzondering; caching wordt alleen uitgevoerd als een CacheRequest parameter is opgegeven (bijvoorbeeld TreeWalker.GetFirstChild(AutomationElement, CacheRequest).

Caching vindt ook plaats wanneer u zich abonneert op een gebeurtenis terwijl een CacheRequest actief is. De AutomationElement doorgegeven aan uw gebeurtenis-handler als de bron van een gebeurtenis bevat de eigenschappen en patronen in de cache die zijn opgegeven door de oorspronkelijke CacheRequest. Wijzigingen die zijn aangebracht in de CacheRequest gebeurtenis nadat u zich op de gebeurtenis hebt geabonneerd, hebben geen effect.

De eigenschappen en besturingspatronen van een element in de gebruikersinterface kunnen in de cache worden opgeslagen.

Opties voor opslaan in cache

De CacheRequest specificeert de volgende opties voor caching.

Eigenschappen voor cache

U kunt eigenschappen opgeven die in de cache moeten worden opgeslagen door voor elke eigenschap aan te roepen Add(AutomationProperty) voordat u de aanvraag activeert.

Patronen beheren in cache

U kunt besturingspatronen opgeven die in de cache moeten worden opgeslagen door voor elk patroon aan te roepen Add(AutomationPattern) voordat u de aanvraag activeert. Wanneer een patroon in de cache wordt opgeslagen, worden de eigenschappen ervan niet automatisch in de cache opgeslagen; u moet de eigenschappen opgeven die u in de cache wilt opslaan met behulp van CacheRequest.Add.

Omvang en filtering van caching

U kunt de elementen opgeven waarvan de eigenschappen en patronen u in de cache wilt opslaan door de CacheRequest.TreeScope eigenschap in te stellen voordat u de aanvraag activeert. Het bereik is relatief ten opzichte van de elementen die worden opgehaald terwijl de aanvraag actief is. Als u bijvoorbeeld alleen Children instelt en vervolgens een AutomationElement ophaalt, worden de eigenschappen en patronen van de onderliggende elementen van dat element wel in de cache opgeslagen, maar niet die van het element zelf. Als u ervoor wilt zorgen dat caching wordt uitgevoerd voor het opgehaalde element zelf, moet u deze opnemen Element in de TreeScope eigenschap. Het is niet mogelijk om het bereik op Parent of Ancestors in te stellen. Een ouder element kan echter in de cache worden opgeslagen wanneer een kindelement in de cache wordt opgeslagen. Zie voor meer informatie Kinderen en Ouders uit de Cache Ophalen.

De mate van caching wordt ook beïnvloed door de CacheRequest.TreeFilter eigenschap. Caching wordt standaard alleen uitgevoerd voor elementen die worden weergegeven in de besturingsweergave van de UI Automation-structuur. U kunt deze eigenschap echter wijzigen om caching toe te passen op alle elementen of alleen op elementen die worden weergegeven in de inhoudsweergave.

Sterkte van de elementverwijzingen

Wanneer u een AutomationElement ophaalt, heeft u standaard toegang tot alle eigenschappen en patronen van dat element, inclusief die welke niet zijn gecached. Voor een grotere efficiëntie kunt u echter opgeven dat de verwijzing naar het element alleen verwijst naar gegevens in de cache door de AutomationElementMode eigenschap van de CacheRequest eigenschap in te stellen op None. In dit geval hebt u geen toegang tot niet-in de cache opgeslagen eigenschappen en patronen van opgehaalde elementen. Dit betekent dat u geen toegang hebt tot eigenschappen via GetCurrentPropertyValue of de Current eigenschap van AutomationElement of een besturingselementpatroon, noch kunt u een patroon ophalen met behulp van GetCurrentPattern of TryGetCurrentPattern. Bij patronen in de cache kunt u methoden aanroepen waarmee array-eigenschappen worden opgehaald, zoals SelectionPattern.SelectionPatternInformation.GetSelection, maar niet om acties op de besturing uit te voeren, zoals InvokePattern.Invoke.

Een voorbeeld van een toepassing die mogelijk geen volledige verwijzingen naar objecten nodig heeft, is een schermlezer, die de Name eigenschappen ControlType van elementen in een venster vooraf zou maken, maar de AutomationElement objecten zelf niet nodig zou hebben.

De CacheRequest activeren

Caching wordt alleen uitgevoerd wanneer AutomationElement objecten worden opgehaald terwijl een CacheRequest actief is voor de huidige thread. Er zijn twee manieren om een CacheRequest te activeren.

De gebruikelijke manier is om te bellen Activate. Met deze methode wordt een object geretourneerd dat IDisposable implementeert. De aanvraag blijft actief zolang het IDisposable object bestaat. De eenvoudigste manier om de levensduur van het object te bepalen, is door de aanroep binnen een using (C#) of Using (Visual Basic)-blok te plaatsen. Dit zorgt ervoor dat de aanroep uit de stack wordt verwijderd, zelfs als er een uitzondering wordt gegenereerd.

Een andere manier, wat handig is wanneer u cacheaanvragen wilt nesten, is het aanroepen Push. Hiermee wordt het verzoek op een stapel geplaatst en geactiveerd. De aanvraag blijft actief totdat deze uit de stack wordt verwijderd door Pop. De aanvraag wordt tijdelijk inactief als een andere aanvraag naar de stack wordt gepusht; alleen de bovenste aanvraag op de stack is actief.

Eigenschappen in cache ophalen

U kunt de eigenschappen in de cache van een element ophalen via de volgende methoden en eigenschappen.

Er wordt een uitzondering gegenereerd als de aangevraagde eigenschap zich niet in de cache bevindt.

Cached, zoals Current, worden afzonderlijke eigenschappen weergegeven als leden van een structuur. U hoeft deze structuur echter niet op te halen; U hebt rechtstreeks toegang tot de afzonderlijke eigenschappen. De eigenschap kan bijvoorbeeld Name worden verkregen van element.Cached.Name, waarbij element een AutomationElement is.

In cache opgeslagen patronen voor besturingselementen ophalen

U kunt de in de cache opgeslagen besturingspatronen van een element ophalen via de volgende methoden.

Als het patroon zich niet in de cache bevindt, GetCachedPattern veroorzaakt een uitzondering en TryGetCachedPattern retourneert false.

U kunt de eigenschappen in de cache van een besturingspatroon ophalen met behulp van de Cached eigenschap van het patroonobject. U kunt ook de huidige waarden ophalen via de Current eigenschap, maar alleen als None deze niet is opgegeven toen de AutomationElement waarde werd opgehaald. (Full is de standaardwaarde en dit staat toegang tot de huidige waarden toe.)

Kinderen en ouders uit de cache ophalen

Wanneer u een AutomationElement element ophaalt en caching aanvraagt voor de kinderen van dat element via de TreeScope eigenschap van de aanvraag, is het vervolgens mogelijk om de kindelementen op te halen uit de CachedChildren eigenschap van het element dat u hebt opgehaald.

Als Element is opgenomen in de scope van de cacheaanvraag, is het hoofdelement van de aanvraag vervolgens beschikbaar via de CachedParent eigenschap van een van de kind-elementen.

Opmerking

U kunt de ouder of voorouder van het rootelement van het verzoek niet opslaan in de cache.

De cache bijwerken

De cache is alleen geldig zolang er niets verandert in de gebruikersinterface. Uw toepassing is verantwoordelijk voor het bijwerken van de cache, meestal in reactie op gebeurtenissen.

Als u zich abonneert op een evenement terwijl een CacheRequest actief is, verkrijgt u een AutomationElement met een bijgewerkte cache als bron voor het evenement wanneer uw evenements-gedelegeerde wordt aangeroepen. U kunt ook gegevens in de cache voor een element bijwerken door aan te roepen GetUpdatedCache. U kunt het origineel CacheRequest doorgeven om alle gegevens bij te werken die eerder in de cache waren opgeslagen.

Als u de cache bijwerkt, worden de eigenschappen van bestaande AutomationElement verwijzingen niet gewijzigd.

Zie ook