Megosztás a következőn keresztül:


Gyorsítótárazás a felhasználói felület automatizálási klienseiben

Megjegyzés:

Ez a dokumentáció azoknak a .NET-keretrendszer-fejlesztőknek készült, akik a System.Windows.Automation névtérben definiált felügyelt felhasználói felületi Automation-osztályokat szeretnék használni. A felhasználói felület automatizálásával kapcsolatos legfrissebb információkért lásd Windows Automation API: UI Automation.

Ez a témakör a felhasználói felület automatizálási tulajdonságainak és szabályozási mintáinak gyorsítótárazását ismerteti.

A felhasználói felület automatizálásában a gyorsítótárazás az adatok előzetes beolvasását jelenti. Az adatok ezután további folyamatközi kommunikáció nélkül is elérhetők. A gyorsítótárazást általában a felhasználói felület automatizálási ügyfélalkalmazásai használják a tulajdonságok és a vezérlési minták tömeges lekérésére. Az információkat ezután szükség szerint lekérik a gyorsítótárból. Az alkalmazás rendszeresen frissíti a gyorsítótárat, általában olyan eseményekre reagálva, amelyek azt jelzik, hogy a felhasználói felületen valami megváltozott.

A gyorsítótárazás előnyei leginkább a Windows Presentation Foundation (WPF) vezérlőin és a kiszolgálóoldali UI Automation-szolgáltatókkal rendelkező egyéni vezérlőkön érezhetők. Az ügyféloldali szolgáltatók, például a Win32-vezérlők alapértelmezett szolgáltatóinak elérése kevesebb előnnyel jár.

A gyorsítótárazás akkor történik, ha az alkalmazás aktivál egy CacheRequest, majd használ bármilyen metódust vagy tulajdonságot, amely egy AutomationElement-t ad vissza; például FindFirst, FindAll. A TreeWalker osztály metódusai kivételt képeznek; a gyorsítótárazás csak akkor történik, ha a CacheRequest paraméterként van megadva (például TreeWalker.GetFirstChild(AutomationElement, CacheRequest).

A gyorsítótárazás akkor is megtörténik, ha előfizet egy eseményre, miközben aktív CacheRequest . A(z) AutomationElement objektum, amelyet eseményforrásként adnak át az eseménykezelőnek, tartalmazza az eredeti CacheRequest által meghatározott gyorsítótárazott tulajdonságokat és mintákat. Az eseményre CacheRequest való feliratkozás után végrehajtott módosításoknak semmilyen hatása nincs.

Az elemek felhasználói felületi automatizálási tulajdonságai és vezérlési mintái gyorsítótárba helyezhetők.

Gyorsítótárazási beállítások

A CacheRequest a következő gyorsítótárazási beállításokat adja meg.

Gyorsítótárazandó tulajdonságok

A kérés aktiválása előtt megadhatja a gyorsítótárazandó tulajdonságokat úgy, hogy meghívja a Add(AutomationProperty)-t minden tulajdonsághoz.

A gyorsítótár-vezérlési minták

A kérés aktiválása előtt a gyorsítótárazandó vezérlőminták mindegyikére meghívhatja a Add(AutomationPattern) függvényt. A minta gyorsítótárazása esetén a rendszer nem gyorsítótárazza automatikusan a mintázat tulajdonságait; meg kell adnia a gyorsítótárazni kívánt tulajdonságokat a használatával CacheRequest.Add.

Gyorsítótárazás hatóköre és szűrése

A kérelem aktiválása előtt a tulajdonság beállításával CacheRequest.TreeScope megadhatja azokat az elemeket, amelyek tulajdonságait és mintáit gyorsítótárba szeretné helyezni. A hatókör a kérés aktív állapota alatt lekért elemekhez viszonyítva van. Ha például csak Children elemet állít be, majd lekér egy AutomationElement elemet, akkor a rendszer a gyermekelemek tulajdonságait és mintáit gyorsítótárazza, de magának az elemnek ezeket nem. Annak érdekében, hogy a gyorsítótárazás a lekért elem esetében történjen, a Element elemet bele kell foglalni a TreeScope tulajdonságba. A hatókör nem állítható be a következőre Parent : vagy Ancestors. Azonban egy szülőelem gyorsítótárazható, amikor egy gyermekelem gyorsítótárazva van. További információ: Gyorsítótárazott gyermekek és szülők lekérése.

A gyorsítótárazás mértékét a CacheRequest.TreeFilter tulajdonság is befolyásolja. Alapértelmezés szerint a gyorsítótárazás csak a felhasználói felület Automation-fa vezérlőnézetében megjelenő elemek esetében történik. Ezt a tulajdonságot azonban módosíthatja úgy, hogy a gyorsítótárazást az összes elemre alkalmazza, vagy csak a tartalomnézetben megjelenő elemekre.

Az elemhivatkozások erőssége

Amikor lekér egy AutomationElementelemet, alapértelmezés szerint hozzáférhet az elem összes tulajdonságához és mintájához, beleértve a nem gyorsítótárazott elemeket is. A nagyobb hatékonyság érdekében azonban megadhatja, hogy az elemre mutató hivatkozás csak a gyorsítótárazott adatokra vonatkozzon, ha a AutomationElementMode tulajdonságát a CacheRequest értékre None állítja. Ebben az esetben nincs hozzáférése a lekért elemek nem gyorsítótárazott tulajdonságaihoz és mintáihoz. Ez azt jelenti, hogy semmilyen tulajdonsághoz nem férhet hozzá a GetCurrentPropertyValue vagy a Current tulajdonságán keresztül AutomationElement, és nem tud mintát lekérni a GetCurrentPattern vagy a TryGetCurrentPattern használatával sem. Lehetőség van gyorsítótárazott minták esetén olyan metódusok meghívására, amelyek lekérik a tömbtulajdonságokat, például SelectionPattern.SelectionPatternInformation.GetSelection, de nem lehet olyanokat meghívni, amelyek műveleteket hajtanak végre a vezérlőn, például InvokePattern.Invoke.

Egy olyan alkalmazásra példa, amely nem feltétlenül igényel teljes hivatkozásokat az objektumokra, egy képernyőolvasó, amely előre leküldi az Name elemeket és ControlType a tulajdonságokat egy ablakban, de magukra az AutomationElement objektumokra nincs szüksége.

A CacheRequest aktiválása

Csak akkor történik gyorsítótárazás, ha AutomationElement aktív az aktuális szálhoz, miközben az CacheRequest objektumokat lekérik. Kétféleképpen aktiválható a CacheRequest.

A szokásos mód az, hogy felhívjuk Activate. Ez a metódus egy implementálható IDisposableobjektumot ad vissza. A kérés addig aktív marad, amíg az IDisposable objektum létezik. Az objektum élettartamának vezérlésének legegyszerűbb módja, ha a hívást egy using (C#) vagy Using (Visual Basic) blokkba csatolja. Ez biztosítja, hogy a kérés akkor is kikerül a veremből, ha kivétel keletkezik.

Egy másik módszer, amely hasznos a gyorsítótár-kérések beágyazásakor, a Push hívása. Ezzel a kérést egy verembe helyezi, és aktiválja. A kérés addig marad aktív, amíg Pop el nem távolítja a veremből. A kérés ideiglenesen inaktívvá válik, ha egy másik kérést küld a verembe; csak a verem felső kérése aktív.

Gyorsítótárazott tulajdonságok beolvasása

Egy elem gyorsítótárazott tulajdonságait az alábbi metódusokkal és attribútumokkal érheti el.

Kivétel keletkezik, ha a kért tulajdonság nincs a gyorsítótárban.

Cached, mint Current, például egy struktúra tagjaiként teszi elérhetővé az egyes tulajdonságokat. Ezt a struktúrát azonban nem kell lekérnie; az egyes tulajdonságokat közvetlenül is elérheti. Például a Name tulajdonság a element.Cached.Name szerezhető be, ahol a element egy AutomationElement.

Vezérlőminták gyorsítótárból való visszakeresése

Az elemek gyorsítótárazott vezérlőmintáit az alábbi módszerekkel lekérdezheti.

Ha a minta nincs a gyorsítótárban, GetCachedPattern kivételt jelez, és TryGetCachedPattern visszaadja false.

A vezérlőminta Cached gyorsítótárazott tulajdonságait a mintaobjektum tulajdonságával kérdezheti le. A jelenlegi értékeket a Current tulajdonságon keresztül is lekérheti, de csak akkor, ha None nem volt megadva a AutomationElement beolvasásakor. (Full az alapértelmezett érték, és ez lehetővé teszi az aktuális értékek elérését.)

Gyorsítótárazott gyermekek és szülők lekérése

Amikor lekér egy AutomationElement elemet és kéri az adott elem gyermekeinek gyorsítótárazását a TreeScope kérelem tulajdonságán keresztül, azt követően lehetősége van lekérni a gyermekelemeket a CachedChildren tulajdonságból az Ön által lekért elemből.

Ha a gyorsítótár-kérelem hatókörébe belefoglalták Element, akkor a kérés gyökéreleme azonnal elérhető a gyermekelemek bármelyikének CachedParent tulajdonságából.

Megjegyzés:

A kérés gyökérelemének szülei vagy ősei nem gyorsítótárazhatók.

A gyorsítótár frissítése

A gyorsítótár csak addig érvényes, amíg a felhasználói felületen nem változik semmi. Az alkalmazás feladata a gyorsítótár frissítése, jellemzően az eseményekre adott válaszként.

Ha előfizet egy eseményre, miközben egy CacheRequest aktív, akkor az eseménykezelő delegáltjának meghívásakor egy frissített gyorsítótárral ellátott AutomationElement-et kap az esemény forrásaként. Egy elem gyorsítótárazott információját is frissítheti a GetUpdatedCache hívásával. Az eredetit CacheRequest átadva frissítheti a korábban gyorsítótárazott összes információt.

A gyorsítótár frissítése nem módosítja a meglévő AutomationElement hivatkozások tulajdonságait.

Lásd még