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
- Ativando o CacheRequest
- Recuperando propriedades em cache
- Recuperando padrões de controle em cache
- Recuperando Filhos e Pais em Cache
- Atualizando o cache
- Tópicos relacionados
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.