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
Criar um CacheRequest.
Especificar as propriedades e os padrões para armazenar em cache, usando [M:System.Windows.Automation.CacheRequest.Add(System.Windows.Automation.AutomationPadrão)].
Especificar o escopo do cache por Configuração o TreeScope Propriedade.
Especificar o Exibir da subárvore definindo a TreeFilter Propriedade.
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.)
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
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).
Uso GetCachedPropertyValue ou recuperar uma propriedade a partir de Cached Propriedade das AutomationElement.
Obtain Cached Patterns and Their Properties
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).
Uso GetCachedPattern(AutomationPattern) ou TryGetCachedPattern(AutomationPattern, Objeto%) Para recuperar um padrão em cache.
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