Partilhar via


Cache em clientes de automação de interface do usuário

Este tópico apresenta o cache de Propriedades e Padrões de Controlarar.

Em Cache significa Pre-fetching de dados.Os dados podem então ser acessados sem que haja mais comunicação entre processos.O cache é normalmente usado por Cliente de Automação interface do usuário Aplicativos para recuperar as propriedades e controlar padrões em massa.Informações são então recuperadas do cache conforme necessário.O Atualizações do Aplicativo o cache periodicamente, geralmente em resposta a eventos signifying que algo na Tem Alterado.

As vantagens do cache são mais perceptível com Controles personalizados que têm do lado do servidor e Provedores de automação interface do usuário.Há menos benefício quando acessar provedores do lado do cliente, como os provedores padrão para Win32 Controles.

Armazenamento em cache ocorre quando o aplicativo ativa um CacheRequest e, em seguida, usa qualquer método ou propriedade que retorna um AutomationElement; Por exemplo, FindFirst, FindAll.Os métodos de TreeWalker Classe são uma exceção; o cache é Concluído somente se um CacheRequest é especificada como um parâmetro (por exemplo, TreeWalkerGetFirstfilho(AutomationElement, CacheSolicitar).

O cache também ocorre quando você se inscrever em um evento enquanto um CacheRequest está ativo.O AutomationElement passado para o manipulador de eventos como a origem de um evento contém as propriedades armazenadas em cache e os padrões especificados pelo original CacheRequest.As alterações feitas a CacheRequest Após você inscrever-se o evento não têm nenhum efeito.

O Propriedades e Padrões de Controlarar de um elemento pode ser armazenadas em cache.

Este tópico contém as seguintes seções.

Opções de cache

O CacheRequest Especifica as opções a seguir para armazenar em cache.

Propriedades a serem armazenadas em cache

Você pode especificar propriedades ao cache chamando Adicionar(AutomationPropriedade) Para cada propriedade antes de ativar a solicitação.

Padrões de controle a serem armazenadas em cache

Você pode especificar padrões de Controlarar para armazenar em cache chamando [M:System.Windows.Automation.CacheRequest.Add(System.Windows.Automation.AutomationPadrão)] Para cada padrão antes de ativar a solicitação.Quando um padrão é armazenado em cache, suas propriedades são automaticamente armazenados em cache; Você deve especificar as propriedades que você deseja em cache usando CacheSolicitarAdicionar(AutomationPropriedade).

Escopo e a filtragem de cache

Você pode especificar os elementos cujas propriedades e padrões deseja cache por Configuração o CacheRequest.TreeScope Propriedade antes de ativar a solicitação.O escopo é em relação aos elementos que são recuperados enquanto a solicitação está ativa.Por exemplo, se você definir somente Children()e em seguida, recuperar uma AutomationElementAs propriedades e os padrões de filhos do elemento são armazenados em cache, mas não os do próprio elemento.Para garantir que o cache é Concluído para o elemento recuperado próprio, você deve incluir Element Na TreeScope Propriedade.Ele não é possível definir o escopo para Parent ou Ancestors.No entanto, um elemento pai pode ser armazenado em cache quando um elemento filho é armazenado em cache; consulte Recuperando Filhos e Pais em Cache contido neste tópico.

A extensão de armazenamento em cache também é afetada pela CacheRequest.TreeFilter Propriedade.Por padrão, o cache é executado somente para os elementos que Aparecer na Modo de controle do árvore.No entanto, você pode alterar esta propriedade para aplicar o cache para Tudo elementos, ou somente para os elementos que aparecem na exibição de conteúdo.

Força de referências de elemento

Quando você recuperar uma AutomationElementpor padrão você tem Acessar a todas as propriedades e padrões desse elemento, incluindo aqueles que não foram armazenados em cache.No entanto, para maior eficiência você pode especificar que a referência para o elemento refere-se a dados armazenados em cache somente, definindo o AutomationElementMode Propriedade das CacheRequest para None.Nesse caso, você não tem acesso a quaisquer propriedades ou padrões não armazenados em cache de elementos recuperados.Isso significa que você não pode acessar qualquer Propriedades através de GetCurrentPropriedadeValor(AutomationPropriedade) ou o Current Propriedade de AutomationElement ou qualquer controle padrão; Nem você pode recuperar um padrão usando [M:System.Windows.Automation.AutomationElement.GetCurrentPadrão(System.Windows.Automation.AutomationPadrão)] ou TryGetCurrentPattern(AutomationPattern, Objeto%).Em padrões em cache, você pode chamar métodos que recuperam propriedades de matriz, como SelectionPatternInformation.GetSelectionmas não os que por Formulário ações no controle, como [M:System.Windows.Automation.InvokePadrão.Invoke].

Um exemplo de um aplicativo que talvez não precisam Completo referências a objetos é um leitor de tela, qual seria prefetch o Name e ControlType() propriedades dos elementos em uma janela mas não seria necessário a AutomationElement Objetos próprios.

Ativando o CacheRequest

O cache é executado somente quando AutomationElement Os objetos são recuperados enquanto um CacheRequest está Ativo para o Thread atual.T aqui são duas maneiras para ativar um CacheRequest.

A maneira usual é chamada Activate.Esse método retorna um objeto que implementa IDisposable.A solicitação permanecerá ativa enquanto a IDisposable o objeto existe.A maneira mais fácil para controlar o tempo de vida do objeto é EN Fechar a chamada em um Usando ( ou Using () bBloquear.Isso garante que a solicitação vai ser ser removida da pilha mesmo se uma exceção for gerada.

Um Outro maneira, o que é útil quando desejar aninhar solicitações de cache, é chamada Push.Isso coloca a solicitação em uma pilha e ativa-a.A solicitação permanece ativa até que ele seja removido de a pilha por Pop.A solicitação fica temporariamente inativa se outra solicitação é inserida na pilha; somente a solicitação do topo da pilha é ativa.

Recuperando propriedades em cache

Você pode recuperar as propriedades armazenadas em cache de um elemento através dos seguintes métodos e propriedades.

Uma exceção é gerada se a propriedade solicitada não estiver no cache.

Cached Semelhante CurrentExpõe as propriedades individuais como membros de uma estrutura.No entanto, você não precisa recuperar essa estrutura; você pode acessar diretamente as propriedades individuais.Por exemplo, o Name Propriedade pode ser obtida elemento.Cached.Name, where element é um AutomationElement.

Recuperando padrões de controle em cache

Você pode recuperar os padrões de controle em cache de um elemento através dos métodos a seguir.

  • GetCachedPattern(AutomationPattern)

  • TryGetCachedPattern(AutomationPattern, Objeto%)

Se o padrão não é no cache, GetCachedPattern(AutomationPattern) gera uma exceção, e TryGetCachedPattern(AutomationPattern, Objeto%) Retorna false.

Você pode recuperar as propriedades armazenadas em cache de um controle padrão usando o Em cache Propriedade do objeto padrão.Você também pode recuperar o atual valores através de Current Propriedade, mas somente se None Não foi especificado quando o AutomationElement foi recuperada.(Full é o valor padrão, e isso permite acesso para os valores atuais).

Recuperando Filhos e Pais em Cache

Quando você recuperar uma AutomationElement e solicite o cache para seus filhos desse elemento através de TreeScope Propriedade da solicitação, é possível posteriormente obter o filho elementos a partir de CachedChildren Propriedade do elemento que é recuperado.

Se Element Foi Incluído no escopo da solicitação de cache, o elemento raiz do pedido está disponível no subseqüentemente o CachedParent Propriedade de qualquer um dos elementos filho.

Observação:

Você não pode armazenar em cache os pais ou ancestrais do elemento raiz da solicitação.

Atualizando o cache

O cache é válido somente, contanto que nada alterações na .O aplicativo é responsável por atualizar o cache, normalmente em resposta a eventos.

Se você se inscrever em um evento enquanto um CacheRequest está ativo, você obtém um AutomationElement Com um cache atualizado como a origem do evento sempre que o manipulador de eventos delegate é chamado.Você pode também Atualizar informações para um elemento chamando armazenadas em cache GetUpdatedCache.Você pode passar no original CacheRequest Para atualizar todas as informações que foi anteriormente em cache.

Atualizar o cache não altera as propriedades de qualquer existente AutomationElement Referências.

Consulte também

Tarefas

Use Caching in UI Automation

Exemplo de FetchTimer

Conceitos

Automação de Eventos de Interface de Usuário para Clientes.