Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Questa documentazione è destinata agli sviluppatori .NET Framework che vogliono usare le classi di automazione interfaccia utente gestite definite nello spazio dei nomi System.Windows.Automation. Per le informazioni più recenti sull'automazione interfaccia utente, vedere API di automazione di Windows: Automazione interfaccia utente.
Questo argomento presenta la memorizzazione nella cache delle proprietà di automazione interfaccia utente e dei pattern di controllo.
In Automazione interfaccia utente la memorizzazione nella cache significa prelettura dei dati. È quindi possibile accedere ai dati senza ulteriori comunicazioni tra processi. La memorizzazione nella cache viene in genere usata dalle applicazioni client di automazione interfaccia utente per recuperare le proprietà e i pattern di controllo in blocco. Le informazioni vengono quindi recuperate dalla cache in base alle esigenze. L'applicazione aggiorna periodicamente la cache, in genere in risposta agli eventi che indica che un elemento nell'interfaccia utente è cambiato.
I vantaggi della memorizzazione nella cache sono più evidenti con i controlli Windows Presentation Foundation (WPF) e i controlli personalizzati che dispongono di provider di automazione interfaccia utente lato server. L'accesso ai provider lato client, ad esempio i provider predefiniti per i controlli Win32, offre meno vantaggi.
La memorizzazione nella cache si verifica quando l'applicazione attiva un CacheRequest oggetto e quindi usa qualsiasi metodo o proprietà che restituisce un AutomationElementoggetto , ad esempio , FindFirstFindAll. I metodi della classe TreeWalker sono un'eccezione: la memorizzazione nella cache viene eseguita solo se un oggetto CacheRequest è specificato come parametro, ad esempio come TreeWalker.GetFirstChild(AutomationElement, CacheRequest).
La memorizzazione nella cache si verifica anche quando si sottoscrive un evento mentre un oggetto CacheRequest è attivo. L'oggetto AutomationElement passato al gestore eventi come origine di un evento contiene le proprietà e i modelli memorizzati nella cache specificati dall'oggetto originale CacheRequest. Le modifiche apportate all'oggetto CacheRequest dopo la sottoscrizione all'evento non hanno alcun effetto.
Le proprietà di automazione interfaccia utente e i pattern di controllo di un elemento possono essere memorizzati nella cache.
Opzioni per la memorizzazione nella cache
CacheRequest Specifica le opzioni seguenti per la memorizzazione nella cache.
Proprietà da memorizzare nella cache
È possibile specificare le proprietà da memorizzare nella cache chiamando Add(AutomationProperty) per ogni proprietà prima di attivare la richiesta.
Pattern di controllo da memorizzare nella cache
È possibile specificare i pattern di controllo da memorizzare nella cache chiamando Add(AutomationPattern) per ogni modello prima di attivare la richiesta. Quando un criterio viene memorizzato nella cache, le relative proprietà non vengono memorizzate automaticamente nella cache; è necessario specificare le proprietà che si desidera memorizzare nella cache usando CacheRequest.Add.
Ambito e filtro della memorizzazione nella cache
È possibile specificare gli elementi le cui proprietà e modelli si desidera memorizzare nella cache impostando la CacheRequest.TreeScope proprietà prima di attivare la richiesta. L'ambito è relativo agli elementi recuperati mentre la richiesta è attiva. Ad esempio, se si imposta solo Childrene quindi si recupera un AutomationElementoggetto , le proprietà e i modelli degli elementi figlio di tale elemento vengono memorizzati nella cache, ma non quelli dell'elemento stesso. Per assicurarsi che la memorizzazione nella cache venga eseguita per l'elemento recuperato stesso, è necessario includere Element nella TreeScope proprietà . Non è possibile impostare l'ambito su Parent o Ancestors. Tuttavia, un elemento padre può essere memorizzato nella cache quando un elemento figlio viene memorizzato nella cache. Per ulteriori informazioni, vedere Recuperare gli elementi figlio e genitori memorizzati nella cache.
L'estensione della memorizzazione nella cache è interessata anche dalla CacheRequest.TreeFilter proprietà . Per impostazione predefinita, la memorizzazione nella cache viene eseguita solo per gli elementi visualizzati nella visualizzazione controllo dell'albero di automazione interfaccia utente. Tuttavia, è possibile modificare questa proprietà per applicare la memorizzazione nella cache a tutti gli elementi o solo agli elementi visualizzati nella visualizzazione contenuto.
Livello di attendibilità dei riferimenti agli elementi
Quando si recupera un oggetto AutomationElement, per impostazione predefinita si ha accesso a tutte le proprietà e i modelli di tale elemento, inclusi quelli che non sono stati memorizzati nella cache. Tuttavia, per una maggiore efficienza è possibile specificare che il riferimento all'elemento fa riferimento solo ai dati memorizzati nella cache, impostando la AutomationElementMode proprietà di CacheRequest su None. In questo caso, non si ha accesso a proprietà e modelli non memorizzati nella cache degli elementi recuperati. Ciò significa che non è possibile accedere ad alcuna proprietà tramite GetCurrentPropertyValue o la proprietà di Current o qualsiasi pattern di controllo; né è possibile recuperare un modello utilizzando AutomationElement o GetCurrentPattern. Nei modelli memorizzati nella cache è possibile chiamare metodi che recuperano proprietà della matrice, ad esempio SelectionPattern.SelectionPatternInformation.GetSelection, ma non quelle che eseguono azioni sul controllo, ad esempio InvokePattern.Invoke.
Un esempio di applicazione che potrebbe non necessitare di riferimenti completi agli oggetti è un'utilità per la lettura dello schermo, che preleterebbe le Name proprietà e ControlType degli elementi in una finestra, ma non avrebbe bisogno degli AutomationElement oggetti stessi.
Attivazione di CacheRequest
Il caching avviene solo quando gli oggetti AutomationElement vengono recuperati mentre CacheRequest è attivo per il thread corrente. Esistono due modi per attivare un oggetto CacheRequest.
Il modo consueto consiste nel chiamare Activate. Questo metodo restituisce un oggetto che implementa IDisposable. La richiesta rimane attiva finché l'oggetto IDisposable esiste. Il modo più semplice per controllare la durata dell'oggetto consiste nel racchiudere la chiamata all'interno di un using blocco (C#) o Using (Visual Basic). In questo modo si garantisce che la richiesta venga estratta dallo stack anche se viene sollevata un'eccezione.
Un altro modo, utile quando si desidera annidare le richieste di cache, consiste nel chiamare Push. La richiesta viene inserita nello stack e attivata. La richiesta rimane attiva fino a quando non viene rimossa dallo stack da Pop. La richiesta diventa temporaneamente inattiva se viene eseguito il push di un'altra richiesta nello stack; solo la richiesta principale nello stack è attiva.
Recupero delle proprietà memorizzate nella cache
È possibile recuperare le proprietà memorizzate nella cache di un elemento tramite i metodi e le proprietà seguenti.
Viene generata un'eccezione se la proprietà richiesta non si trova nella cache.
Cached, ad esempio Current, espone le singole proprietà come membri di una struttura. Tuttavia, non è necessario recuperare questa struttura; è possibile accedere direttamente alle singole proprietà. Ad esempio, la Name proprietà può essere ottenuta da element.Cached.Name, dove element è un AutomationElement oggetto.
Recupero di modelli di controllo memorizzati nella cache
È possibile recuperare i pattern di controllo memorizzati nella cache di un elemento tramite i metodi seguenti.
Se il modello non è presente nella cache, GetCachedPattern genera un'eccezione e TryGetCachedPattern restituisce false.
È possibile recuperare le proprietà memorizzate nella cache di un pattern di controllo usando la Cached proprietà dell'oggetto pattern. È anche possibile recuperare i valori correnti tramite la Current proprietà , ma solo se None non è stato specificato quando AutomationElement è stato recuperato . (Full è il valore predefinito e consente l'accesso ai valori correnti.
Recuperare nodi figli e nodi genitori memorizzati nella cache
Quando si recupera un oggetto AutomationElement e si richiede la memorizzazione nella cache per gli elementi figlio di tale elemento tramite la TreeScope proprietà della richiesta, è successivamente possibile ottenere gli elementi figlio dalla CachedChildren proprietà dell'elemento recuperato.
Se Element è stato incluso nell'ambito della richiesta di cache, l'elemento radice della richiesta viene successivamente disponibile dalla CachedParent proprietà di uno degli elementi figlio.
Annotazioni
Non è possibile memorizzare nella cache i genitori o gli antenati dell'elemento radice della richiesta.
Aggiornamento della cache
La cache è valida solo finché non cambia nulla nell'interfaccia utente. L'applicazione è responsabile dell'aggiornamento della cache, in genere in risposta agli eventi.
Se si sottoscrive un evento mentre CacheRequest è attivo, si ottiene un oggetto AutomationElement con una cache aggiornata come origine dell'evento ogni volta che viene chiamato il delegato gestore dell'evento. È anche possibile aggiornare le informazioni memorizzate nella cache per un elemento chiamando GetUpdatedCache. È possibile passare l'originale CacheRequest per aggiornare tutte le informazioni precedentemente memorizzate nella cache.
L'aggiornamento della cache non modifica le proprietà di alcun riferimento esistente AutomationElement .