Compartilhar via


Use Caching in UI Automation

Esta seção mostra como implementar o cache de AutomationElement Propriedades e Padrões de Controlarar.

Activate a Cache Request

  1. Criar um CacheRequest.

  2. Especificar as propriedades e os padrões para armazenar em cache, usando [M:System.Windows.Automation.CacheRequest.Add(System.Windows.Automation.AutomationPadrão)].

  3. Especificar o escopo do cache por Configuração o TreeScope Propriedade.

  4. Especificar o Exibir da subárvore definindo a TreeFilter Propriedade.

  5. Definir o AutomationElementMode Propriedade para None Se você desejar aumentar a eficiência por não recuperar um Completo referência a objetos.(This will make it impossible to retrieve current values from those objects.)

  6. Ativar o Solicitar, usando Activate Em um Usando Bloquear (Using Em ).

Depois de obter AutomationElement Os objetos ou inscrever-se em eventos, the Ativar a solicitação usando Pop (Se Push Foi usado) ou por disposing o objeto criado por Activate.(Use Activate Em um Usando Bloquear (Using Em ).

Cache AutomationElement Properties

  1. Enquanto um CacheRequest está Ativo, obter AutomationElement objetos usando FindFirst ou FindAll; Ou obtenha um AutomationElement Como a fonte de um evento que você Registrado para quando o CacheRequest estava ativo.(Você também pode criar um cache passando um CacheRequest a GetUpdatedCache ou uma da TreeWalker Métodos).

  2. Uso GetCachedPropertyValue ou recuperar uma propriedade a partir de Cached Propriedade das AutomationElement.

Obtain Cached Patterns and Their Properties

  1. Enquanto um CacheRequest está Ativo, obter AutomationElement objetos usando FindFirst ou FindAll; Ou obtenha um AutomationElement Como a fonte de um evento que você Registrado para quando o CacheRequest estava ativo.(Você também pode criar um cache passando um CacheRequest a GetUpdatedCache ou uma da TreeWalker Métodos).

  2. Uso GetCachedPattern(AutomationPattern) ou TryGetCachedPattern(AutomationPattern, Objeto%) Para recuperar um padrão em cache.

  3. Recuperar valores de propriedade a partir de Em cache Propriedade do controle padrão.

Exemplo

O exemplo de código a seguir mostra Diversos aspectos do armazenamento em cache, usando Activate Para ativar o CacheRequest.








  CachePropertiesByActivate(AutomationElement elementList)
{
    AutomationElement elementListItem;

    
    CacheRequest cacheRequest =  CacheRequest();
    cacheRequest.Add(AutomationElement.NameProperty);
    cacheRequest.Add(AutomationElement.IsEnabledProperty);
    cacheRequest.Add(SelectionItemPattern.Pattern);
    cacheRequest.Add(SelectionItemPattern.SelectionContainerProperty);

    
     (cacheRequest.Activate())
    {
        Condition cond =  PropertyCondition(AutomationElement.IsSelectionItemPatternAvailableProperty, );
        elementListItem = elementList.FindFirst(TreeScope.Children, cond);
    }
    

    
    SelectionItemPattern pattern;
    String itemName;
    
    {
        itemName = elementListItem.Cached.Name;
        pattern = elementListItem.GetCachedPattern(SelectionItemPattern.Pattern)  SelectionItemPattern;
    }
     (InvalidOperationException ex)
    {
        Console.WriteLine();
        ;
    }
    
    object cachedPattern;
     ( == elementListItem.TryGetCachedPattern(SelectionItemPattern.Pattern,  cachedPattern))
    {
        pattern = cachedPattern  SelectionItemPattern;
    }

    
    AutomationElement parentList = pattern.Cached.SelectionContainer;

    
    

    
    
    

    
    
    itemName = elementListItem.Current.Name;
}







  CachePropertiesByActivate( elementList  AutomationElement)

     myCacheRequest   CacheRequest()
    myCacheRequest.Add(AutomationElement.NameProperty)
    myCacheRequest.Add(AutomationElement.IsEnabledProperty)
    myCacheRequest.Add(SelectionItemPattern.Pattern)
    myCacheRequest.Add(SelectionItemPattern.SelectionContainerProperty)

     elementListItem  AutomationElement

     myCacheRequest.Activate()
         myCondition   PropertyCondition( _
            AutomationElement.IsSelectionItemPatternAvailableProperty, )
        elementListItem = elementList.FindFirst(TreeScope.Children, myCondition)
     


     pattern  SelectionItemPattern
     itemName  
    
        itemName = elementListItem.Cached.Name
        pattern = DirectCast(elementListItem.GetCachedPattern(SelectionItemPattern.Pattern), _
            SelectionItemPattern)
     ex  InvalidOperationException
        Console.WriteLine()
        
     

     cachedPattern  Object = 
      = elementListItem.TryGetCachedPattern(SelectionItemPattern.Pattern, cachedPattern) 
        pattern = DirectCast(cachedPattern, SelectionItemPattern)
     

     parentList  AutomationElement = pattern.Cached.SelectionContainer







    itemName = elementListItem.Current.Name
  'CachePropertiesByActivate

O exemplo de código a seguir mostra Diversos aspectos do armazenamento em cache, usando Push Para ativar o CacheRequest.Exceto quando você desejar aninhar solicitações de cache, é preferível usar Activate.








  CachePropertiesByPush(AutomationElement elementList)
{
    
    CacheRequest cacheRequest =  CacheRequest();

    
    cacheRequest.AutomationElementMode = AutomationElementMode.None;

    
    cacheRequest.TreeFilter = Automation.RawViewCondition;

    
    cacheRequest.Add(AutomationElement.NameProperty);
    cacheRequest.Add(SelectionItemPattern.Pattern);

    
    cacheRequest.Push();

    
    Condition cond =  PropertyCondition(AutomationElement.IsSelectionItemPatternAvailableProperty, );
    AutomationElement elementListItem = elementList.FindFirst(TreeScope.Children, cond);

    
    
    

    
    cacheRequest.Pop();

    
    String itemName = elementListItem.Cached.Name;
    SelectionItemPattern pattern = elementListItem.GetCachedPattern(SelectionItemPattern.Pattern)  SelectionItemPattern;

    
    itemName = elementListItem.GetCachedPropertyValue(AutomationElement.NameProperty)  String;

    
    
    object objName = elementListItem.GetCachedPropertyValue(AutomationElement.NameProperty, );
     (objName == AutomationElement.NotSupported)
    {
        itemName = ;
    }
    
    {
        itemName = objName  String;
    }

    
    
    
    
}







  CachePropertiesByPush( elementList  AutomationElement)

     cacheRequest   CacheRequest()

    cacheRequest.AutomationElementMode = AutomationElementMode.None

    cacheRequest.TreeFilter = Automation.RawViewCondition

    cacheRequest.Add(AutomationElement.NameProperty)
    cacheRequest.Add(SelectionItemPattern.Pattern)

    cacheRequest.Push()

     myCondition   PropertyCondition(AutomationElement.IsSelectionItemPatternAvailableProperty, _
        )
     elementListItem  AutomationElement = elementList.FindFirst(TreeScope.Children, myCondition)




    cacheRequest.Pop()

     itemName   = elementListItem.Cached.Name
     pattern  SelectionItemPattern = _
        DirectCast(elementListItem.GetCachedPattern(SelectionItemPattern.Pattern), SelectionItemPattern)

    itemName = CStr(elementListItem.GetCachedPropertyValue(AutomationElement.NameProperty))


     objName  Object = elementListItem.GetCachedPropertyValue(AutomationElement.NameProperty, )
     objName  AutomationElement.NotSupported 
        itemName = 
    
        itemName = CStr(objName)
     





  'CachePropertiesByPush

Consulte também

Conceitos

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