Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här dokumentationen är avsedd för .NET Framework-utvecklare som vill använda de hanterade UI Automation-klasserna som definierats i System.Windows.Automation namnrymd. Den senaste informationen om UI Automation finns i Windows Automation API: UI Automation.
Det här avsnittet beskriver cachelagring av egenskaper och kontrollmönster för gränssnittsautomatisering.
I UI Automation innebär cachelagring förhämtning av data. Data kan sedan nås utan ytterligare kommunikation mellan processer. Cachelagring används vanligtvis av UI Automation-klientprogram för att hämta egenskaper och kontrollera mönster i bulk. Informationen hämtas sedan från cachen efter behov. Programmet uppdaterar cachen regelbundet, vanligtvis som svar på händelser som innebär att något i användargränssnittet (UI) har ändrats.
Fördelarna med cachelagring är mest märkbara med WPF-kontroller (Windows Presentation Foundation) och anpassade kontroller som har leverantörer av användargränssnittsautomatisering på serversidan. Det finns mindre fördelar vid åtkomst till leverantörer på klientsidan, till exempel standardprovidrar för Win32-kontroller.
Cachelagring sker när programmet aktiverar en CacheRequest och sedan använder en metod eller egenskap som returnerar en AutomationElement, till exempel FindFirst, FindAll. Metoderna för TreeWalker klassen är ett undantag. Cachelagring görs endast om en CacheRequest anges som en parameter (till exempel TreeWalker.GetFirstChild(AutomationElement, CacheRequest).
Cachelagring sker också när du prenumererar på en händelse medan en CacheRequest är aktiv. Den AutomationElement som skickas till händelsehanteraren som källa för en händelse innehåller de cachelagrade egenskaper och mönster som anges av den ursprungliga CacheRequest. Ändringar som görs i CacheRequest när du prenumererar på händelsen har ingen effekt.
UI Automation-egenskaperna och kontrollmönstren för ett element kan cachelagras.
Alternativ för cachelagring
CacheRequest Anger följande alternativ för cachelagring.
Egenskaper till cache
Du kan ange egenskaper för cachelagring genom att anropa Add(AutomationProperty) för varje egenskap innan du aktiverar begäran.
Kontrollmönster för caching
Du kan ange kontrollmönster som ska cachelagrats genom att anropa Add(AutomationPattern) för varje mönster innan du aktiverar begäran. När ett mönster cachelagras cachelagras inte dess egenskaper automatiskt; du måste ange de egenskaper som du vill cachelagra med hjälp av CacheRequest.Add.
Omfång och filtrering av cachelagring
Du kan ange de element vars egenskaper och mönster du vill cachelagrar genom att ange CacheRequest.TreeScope egenskapen innan du aktiverar begäran. Omfånget är relativt till de element som hämtas medan begäran är aktiv. Om du till exempel bara ställer in Children och sedan hämtar ett AutomationElement, cachelagras egenskaperna och mönstren för de underordnade elementen, men inte för själva elementet. För att säkerställa att cachelagringen görs för själva det hämtade elementet måste du inkludera Element i TreeScope egenskapen. Det går inte att ange omfånget till Parent eller Ancestors. Ett överordnat element kan dock cachelagras när ett underordnat element cachelagras. För mer information, se Hämtning av cachelagrade barn och föräldrar.
Cachelagringens omfattning påverkas också av CacheRequest.TreeFilter egenskapen. Som standard utförs cachelagring endast för element som visas i kontrollvyn för UI Automation-trädet. Du kan dock ändra den här egenskapen så att cachelagring tillämpas på alla element, eller bara på element som visas i innehållsvyn.
Styrkan i elementreferenserna
När du hämtar en AutomationElementhar du som standard åtkomst till alla egenskaper och mönster för elementet, inklusive de som inte cachelagrades. För större effektivitet kan du dock ange att referensen till elementet endast refererar till cachelagrade data genom att ange AutomationElementMode egenskapen CacheRequest för till None. I det här fallet har du inte åtkomst till några icke-cachelagrade egenskaper och mönster för hämtade element. Det innebär att du inte kan komma åt några egenskaper via GetCurrentPropertyValue eller Current
-egenskapen av AutomationElement, eller från något kontrollmönster; du kan inte heller hämta ett mönster med hjälp av GetCurrentPattern eller TryGetCurrentPattern. På cachelagrade mönster kan du anropa metoder som hämtar matrisegenskaper, till exempel SelectionPattern.SelectionPatternInformation.GetSelection, men inte några som utför åtgärder på kontrollen, till exempel InvokePattern.Invoke.
Ett exempel på ett program som kanske inte behöver fullständiga referenser till objekt är en skärmläsare, som skulle förhämta Name och ControlType-egenskaperna för elementen i ett fönster, men som inte skulle behöva själva AutomationElement-objekten.
Aktivera den CacheRequest
Cachelagring utförs endast när AutomationElement objekt hämtas medan en CacheRequest är aktiv för den aktuella tråden. Det finns två sätt att aktivera en CacheRequest.
Det vanliga sättet är att anropa Activate. Den här metoden returnerar ett objekt som implementerar IDisposable. Begäran förblir aktiv så länge objektet IDisposable finns. Det enklaste sättet att styra objektets livslängd är att omsluta anropet inom ett using
(C#) eller Using
(Visual Basic)-block. Detta säkerställer att begäran kommer att tas bort från stacken även om ett undantag inträffar.
Ett annat sätt, som är användbart när du vill kapsla cachebegäranden, är att anropa Push. Detta placerar begäran på en stack och aktiverar den. Begäran förblir aktiv tills den tas bort från stacken av Pop. Begäran blir tillfälligt inaktiv om en annan begäran skickas till stacken. endast den översta begäran i stacken är aktiv.
Hämtar cachelagrade egenskaper
Du kan hämta cachelagrade egenskaper för ett element via följande metoder och egenskaper.
Ett undantag utlöses om den begärda egenskapen inte finns i cacheminnet.
Cached, till exempel Current, exponerar enskilda egenskaper som medlemmar i en struktur. Du behöver dock inte hämta den här strukturen. du kan komma åt de enskilda egenskaperna direkt. Egenskapen Name kan till exempel hämtas från element.Cached.Name
, där element
är en AutomationElement.
Hämtar cachelagrade kontrollmönster
Du kan hämta cachelagrade kontrollmönster för ett element med hjälp av följande metoder.
Om mönstret inte finns i cacheminnet GetCachedPattern genererar du ett undantag och TryGetCachedPattern returnerar false
.
Du kan hämta cachelagrade egenskaper för ett kontrollmönster med hjälp Cached
av egenskapen för mönsterobjektet. Du kan också hämta de aktuella värdena via egenskapen Current
, men bara om None inte angavs när AutomationElement hämtades. (Full är standardvärdet och tillåter åtkomst till de aktuella värdena.)
Hämta cachelagrade barn och föräldrar
När du hämtar en AutomationElement och begär cachning för underordnade element genom TreeScope-egenskapen i begäran, är det sedan möjligt att hämta de underordnade elementen från CachedChildren-egenskapen för det element som du hämtade.
Om Element ingår i cachebegärans omfång är rotelementet i begäran senare tillgängligt från CachedParent-egenskapen för något av dess underordnade element.
Anmärkning
Du kan inte cachelagra föräldrar eller förfäder till rotelementet i begäran.
Uppdatera cachen
Cachen är endast giltig så länge inget ändras i användargränssnittet. Ditt program ansvarar för att uppdatera cacheminnet, vanligtvis som svar på händelser.
Om du prenumererar på en händelse medan en CacheRequest är aktiv får du en AutomationElement med en uppdaterad cache som källa för händelsen när händelsehanterardelegaten anropas. Du kan också uppdatera cachelagrad information för ett element genom att anropa GetUpdatedCache. Du kan skicka in originalet CacheRequest för att uppdatera all information som tidigare cachelagrats.
Uppdatering av cacheminnet ändrar inte egenskaperna för befintliga AutomationElement referenser.