Sdílet prostřednictvím


Ukládání do mezipaměti v klientech automatizace uživatelského rozhraní

Poznámka:

Tato dokumentace je určená pro vývojáře rozhraní .NET Framework, kteří chtějí používat spravované třídy automatizace uživatelského rozhraní definované v oboru názvů System.Windows.Automation. Nejnovější informace o automatizaci uživatelského rozhraní najdete v tématu rozhraní API služby Windows Automation: Automatizace uživatelského rozhraní.

Toto téma představuje ukládání vlastností automatizace uživatelského rozhraní a vzorů ovládacích prvků do mezipaměti.

V automatizaci uživatelského rozhraní znamená ukládání do mezipaměti předběžné načtení dat. K datům se pak dostanete bez další komunikace mezi procesy. Ukládání do mezipaměti se obvykle používá klientskými aplikacemi automatizace uživatelského rozhraní k hromadnému načítání vlastností a vzorů ovládacích prvků. Informace se pak podle potřeby načtou z mezipaměti. Aplikace pravidelně aktualizuje mezipaměť, obvykle v reakci na události, které značí, že se něco v uživatelském rozhraní změnilo.

Výhody ukládání do mezipaměti jsou nejvýraznější díky ovládacím prvkům Windows Presentation Foundation (WPF) a vlastním ovládacím prvkům, které mají poskytovatele automatizace uživatelského rozhraní na straně serveru. Při přístupu k poskytovatelům na straně klienta, jako jsou výchozí zprostředkovatelé pro ovládací prvky Win32, je méně výhod.

Ukládání do mezipaměti se nastane, když aplikace aktivuje CacheRequest a pak použije jakoukoli metodu nebo vlastnost, která vrací AutomationElement, FindFirst nebo FindAll. Metody třídy TreeWalker jsou výjimkou; ukládání do mezipaměti se provádí pouze v případě, že je CacheRequest zadán jako parametr (například TreeWalker.GetFirstChild(AutomationElement, CacheRequest)).

K ukládání do mezipaměti dochází také v případě, že se přihlásíte k odběru události, když CacheRequest je aktivní. AutomationElement předaná do zpracovatele události jako zdroj události obsahuje vlastnosti v mezipaměti a vzory určené původním CacheRequest. Jakékoli změny provedené na CacheRequest po přihlášení k události nemají žádný vliv.

Vlastnosti automatizace uživatelského rozhraní a vzory ovládacích prvků lze uložit do mezipaměti.

Možnosti ukládání do mezipaměti

Určuje CacheRequest následující možnosti ukládání do mezipaměti.

Vlastnosti k ukládání do mezipaměti

Vlastnosti, které se mají ukládat do mezipaměti, můžete zadat voláním Add(AutomationProperty) každé vlastnosti před aktivací požadavku.

Vzorové šablony pro ukládání do mezipaměti

Řídicí vzory, které se mají ukládat do mezipaměti, můžete zadat voláním Add(AutomationPattern) jednotlivých vzorů před aktivací požadavku. Pokud je vzor uložen v mezipaměti, jeho vlastnosti se automaticky neukládají do mezipaměti; je nutné zadat vlastnosti, které chcete uložit do mezipaměti pomocí .CacheRequest.Add

Rozsah a filtrování ukládání do mezipaměti

Můžete zadat prvky, jejichž vlastnosti a vzory chcete uložit do mezipaměti, nastavením CacheRequest.TreeScope vlastnosti před aktivací požadavku. Rozsah je relativní ve vztahu k prvkům, které jsou načítány, když je požadavek aktivní. Pokud například nastavíte pouze Children, a pak načtete AutomationElement, vlastnosti a vzory podřízených objektů tohoto prvku jsou uloženy v mezipaměti, ale nikoli vlastnosti samotného prvku. Pokud chcete zajistit, aby se ukládání do mezipaměti provádělo pro samotný načtený prvek, musíte zahrnout Element do TreeScope vlastnosti. Rozsah není možné nastavit na Parent nebo Ancestors. Nadřazený prvek však může být uložen do mezipaměti při ukládání podřízeného elementu do mezipaměti. Další informace naleznete v tématu Načítání podřízených a nadřazených objektů uložených v mezipaměti.

Rozsah ukládání do mezipaměti je také ovlivněn vlastností CacheRequest.TreeFilter . Ve výchozím nastavení se ukládání do mezipaměti provádí pouze pro prvky, které se zobrazují v zobrazení ovládacího prvku stromu Automatizace uživatelského rozhraní. Tuto vlastnost však můžete změnit tak, aby se ukládání do mezipaměti použilo pro všechny prvky, nebo pouze na prvky, které se zobrazují v zobrazení obsahu.

Síla odkazů na elementy

Při načtení objektu AutomationElement, ve výchozím nastavení máte přístup ke všem vlastnostem a vzorům tohoto prvku, včetně těch, které nebyly uloženy v mezipaměti. Pro větší efektivitu můžete určit, že odkaz na prvek odkazuje pouze na data uložená v mezipaměti, nastavením vlastnosti AutomationElementMode u CacheRequest na hodnotu None. V tomto případě nemáte přístup k žádným vlastnostem a vzorům načtených prvků, které nejsou uložené v mezipaměti. To znamená, že nemáte přístup k žádným vlastnostem prostřednictvím GetCurrentPropertyValue nebo vlastnosti Current objektu AutomationElement či jakéhokoli ovládacího vzoru; a vzor nelze načíst pomocí GetCurrentPattern nebo TryGetCurrentPattern. U vzorů uložených v mezipaměti můžete volat metody, které načítají vlastnosti pole, například SelectionPattern.SelectionPatternInformation.GetSelection, ale ne žádné, které provádějí akce na ovládacím prvku, například InvokePattern.Invoke.

Příkladem aplikace, která nemusí potřebovat úplné odkazy na objekty, je čtečka obrazovky, která by předběžně načítala Name a ControlType vlastnosti prvků v okně, ale samotné objekty AutomationElement by nepotřebovala.

Aktivace CacheRequest

Mezipaměť ukládá pouze tehdy, když jsou načteny AutomationElement objekty a CacheRequest je aktivní pro aktuální vlákno. Existují dva způsoby, jak aktivovat CacheRequest.

Obvyklým způsobem je volat Activate. Tato metoda vrátí objekt, který implementuje IDisposable. Požadavek zůstane aktivní, dokud IDisposable objekt existuje. Nejjednodušší způsob, jak řídit životnost objektu, je uzavřít volání do using bloku (C#) nebo Using (Visual Basic). Tím se zajistí, že se požadavek ze zásobníku odstraní, i když dojde k výjimce.

Dalším způsobem, který je užitečný, pokud chcete vnořit požadavky na mezipaměť, je použít Push. Tím se požadavek vloží do zásobníku a poté se aktivuje. Požadavek zůstává aktivní, dokud jej Pop neodstraní ze zásobníku. Požadavek bude dočasně neaktivní, pokud se do zásobníku odešle jiný požadavek; Aktivní je pouze horní požadavek v zásobníku.

Načítání vlastností uložených v mezipaměti

Vlastnosti elementu uložené v mezipaměti můžete načíst následujícími metodami a vlastnostmi.

Výjimka se vyvolá, pokud požadovaná vlastnost není v mezipaměti.

Cached, například Current, zveřejňuje jednotlivé vlastnosti jako členy struktury. Tuto strukturu však nemusíte načítat; k jednotlivým vlastnostem můžete přistupovat přímo. Vlastnost Name lze například získat z element.Cached.Name, kde element je AutomationElement.

Načítání vzorů ovládacích prvků uložených v mezipaměti

Vzory ovládacích prvků uložených v mezipaměti můžete načíst pomocí následujících metod.

Pokud vzor není v mezipaměti, GetCachedPattern vyvolá výjimku a TryGetCachedPattern vrátí false.

Vlastnosti ovládacího prvku uložené v mezipaměti můžete načíst pomocí Cached vlastnosti objektu vzoru. Můžete také načíst aktuální hodnoty prostřednictvím vlastnosti Current, ale pouze pokud nebyl None zadán při načtení AutomationElement. (Full je výchozí hodnota a to umožňuje přístup k aktuálním hodnotám.)

Získávání objektů dítěte a rodiče v mezipaměti

Když načtete AutomationElement a vyžádáte ukládání do mezipaměti pro podřízené položky tohoto prvku prostřednictvím TreeScope vlastnosti požadavku, je následně možné získat podřízené prvky z CachedChildren vlastnosti prvku, který jste získali.

Pokud Element byl zahrnut v rozsahu požadavku mezipaměti, kořenový prvek požadavku je následně k dispozici z CachedParent vlastnosti libovolného podřízeného elementu.

Poznámka:

Nadřazené prvky nebo předchůdce kořenového prvku požadavku nelze ukládat do mezipaměti.

Aktualizace mezipaměti

Mezipaměť je platná pouze za předpokladu, že se v uživatelském rozhraní nic nezmění. Vaše aplikace zodpovídá za aktualizaci mezipaměti, obvykle v reakci na události.

Pokud se přihlásíte k odběru události, když je CacheRequest aktivní, získáte AutomationElement s aktualizovanou mezipamětí jako zdrojem události při každém zavolání delegáta zpracování události. Informace uložené v mezipaměti pro prvek můžete aktualizovat také voláním GetUpdatedCache. Původní CacheRequest můžete předat, abyste aktualizovali všechny informace, které byly dříve ukládány v cache.

Aktualizace mezipaměti nemění vlastnosti existujících AutomationElement odkazů.

Viz také