Caching in UI Automation-clients
Notitie
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 Automation voor 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. Er is minder voordeel bij het openen van providers aan de clientzijde, zoals de standaardproviders voor Win32-besturingselementen.
Caching vindt plaats wanneer de toepassing een CacheRequest en vervolgens een methode of eigenschap gebruikt die een AutomationElement, bijvoorbeeld FindFirst, FindAllretourneert . 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
Hiermee CacheRequest geeft u de volgende opties voor opslaan in cache op.
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.
Bereik en filteren 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 Childreninstelt en vervolgens een AutomationElement, worden de eigenschappen en patronen van onderliggende elementen van dat element 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 in Parent te stellen op of Ancestors. Een bovenliggend element kan echter in de cache worden opgeslagen wanneer een onderliggend element in de cache wordt opgeslagen. Zie Voor meer informatie het ophalen van kinderen en ouders in de cache.
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, standaard hebt u toegang tot alle eigenschappen en patronen van dat element, inclusief de eigenschappen die niet in de cache zijn opgeslagen. 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 matrixeigenschappen worden opgehaald, zoals SelectionPattern.SelectionPatternInformation.GetSelection, maar niet die acties uitvoeren op het besturingselement, 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.
De gebruikelijke manier is om te bellen Activate. Met deze methode wordt een object geretourneerd dat wordt geïmplementeerd IDisposable. 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 aanvraag uit de stack wordt weergegeven, zelfs als er een uitzondering wordt gegenereerd.
Een andere manier, wat handig is wanneer u cacheaanvragen wilt nesten, is het aanroepen Push. Hiermee wordt de aanvraag op een stack 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
, waar element
is een AutomationElement.
Patronen voor in cache opgeslagen besturingselementen ophalen
U kunt de patronen van een element in de cache ophalen via de volgende methoden.
Als het patroon zich niet in de cache bevindt, GetCachedPattern genereert u een uitzondering en TryGetCachedPattern retourneert u false
deze.
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 ophalen in cache
Wanneer u een AutomationElement cache ophaalt en aanvraagt voor onderliggende elementen van dat element via de TreeScope eigenschap van de aanvraag, is het vervolgens mogelijk om de onderliggende elementen op te halen uit de CachedChildren eigenschap van het element dat u hebt opgehaald.
Als Element deze is opgenomen in het bereik van de cacheaanvraag, is het hoofdelement van de aanvraag vervolgens beschikbaar vanuit de CachedParent eigenschap van een van de onderliggende elementen.
Notitie
U kunt geen bovenliggende of bovenliggende elementen van het hoofdelement van de aanvraag opslaan.
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 gebeurtenis terwijl een CacheRequest gebeurtenis actief is, verkrijgt u een AutomationElement met een bijgewerkte cache als de bron van de gebeurtenis wanneer uw gemachtigde voor de gebeurtenis-handler 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.