UI Otomasyonda Önbelleğe Alma
Not
Bu belgeler, ad alanında tanımlanan yönetilen UI Otomasyonu sınıflarını kullanmak isteyen .NET Framework geliştiricilerine System.Windows.Automation yöneliktir. UI Otomasyonu hakkında en son bilgiler için bkz. Windows Otomasyonu API'si: UI Otomasyonu.
Bu konu başlığında UI Otomasyonu özelliklerin ve denetim desenlerinin önbelleğe alınması tanıtılmaktadır.
UI Otomasyonu'de önbelleğe alma, verilerin önceden getirilmesi anlamına gelir. Daha sonra verilere daha fazla çapraz işlem iletişimi olmadan erişilebilir. Önbelleğe Alma genellikle UI Otomasyonu istemci uygulamaları tarafından özellikleri ve denetim desenlerini toplu olarak almak için kullanılır. Daha sonra bilgiler gerektiğinde önbellekten alınır. Uygulama, genellikle kullanıcı arabirimindeki (UI) bir şeyin değiştiğini belirten olaylara yanıt olarak önbelleği düzenli aralıklarla güncelleştirir.
Önbelleğe almanın avantajları en çok, sunucu tarafı UI Otomasyonu sağlayıcıları olan Windows Presentation Foundation (WPF) denetimleri ve özel denetimlerle fark edilir. Win32 denetimleri için varsayılan sağlayıcılar gibi istemci tarafı sağlayıcılarına erişirken daha az avantaj sağlanır.
Önbelleğe Alma, uygulama bir'i CacheRequest etkinleştirdiğinde ve sonra bir döndüren herhangi bir AutomationElementyöntem veya özellik kullandığında oluşur; örneğin, FindFirst, FindAll. sınıfının yöntemleri TreeWalker bir özel durumdur; önbelleğe alma yalnızca parametresi olarak belirtilmişse CacheRequest (örneğin, TreeWalker.GetFirstChild(AutomationElement, CacheRequest)) yapılır.
Önbelleğe Alma etkinken CacheRequest bir olaya abone olduğunuzda da oluşur. Bir AutomationElement olayın kaynağı olarak olay işleyicinize geçirilen, özgün CacheRequesttarafından belirtilen önbelleğe alınmış özellikleri ve desenleri içerir. Olaya abone olduktan sonra üzerinde yapılan CacheRequest değişikliklerin hiçbir etkisi olmaz.
Bir öğenin UI Otomasyonu özellikleri ve denetim desenleri önbelleğe alınabilir.
Önbelleğe Alma seçenekleri
CacheRequest önbelleğe alma için aşağıdaki seçenekleri belirtir.
Önbelleğe Alınacak Özellikler
İsteği etkinleştirmeden önce her özellik için çağrı yaparak Add(AutomationProperty) önbelleğe alınacak özellikleri belirtebilirsiniz.
Önbelleğe Alınan Desenleri Denetleme
İsteği etkinleştirmeden önce her desen için çağrı Add(AutomationPattern) yaparak önbelleğe alınacak denetim desenlerini belirtebilirsiniz. Bir desen önbelleğe alındığında özellikleri otomatik olarak önbelleğe alınmaz; kullanarak CacheRequest.Addönbelleğe alınmasını istediğiniz özellikleri belirtmeniz gerekir.
Önbelleğe Alma Kapsamı ve Filtrelemesi
İsteği etkinleştirmeden önce özelliğini ayarlayarak CacheRequest.TreeScope özelliklerini ve desenlerini önbelleğe almak istediğiniz öğeleri belirtebilirsiniz. Kapsam, istek etkinken alınan öğelere göredir. Örneğin, yalnızca Childrenayarlarsanız ve sonra bir AutomationElementalırsanız, bu öğenin alt öğelerinin özellikleri ve desenleri önbelleğe alınır, ancak öğenin kendisi önbelleğe alınmaz. Alınan öğenin kendisi için önbelleğe alma işleminin yapıldığından emin olmak için özelliğine TreeScope eklemeniz Element gerekir. Kapsamı Parent veya Ancestorsolarak ayarlamak mümkün değildir. Ancak, bir alt öğe önbelleğe alınırken üst öğe önbelleğe alınabilir. Daha fazla bilgi için bkz . Önbelleğe Alınmış Alt Öğeleri ve Ebeveynleri Alma.
Önbelleğe alma kapsamı özelliğinden CacheRequest.TreeFilter de etkilenir. Varsayılan olarak, önbelleğe alma yalnızca UI Otomasyonu ağacının denetim görünümünde görünen öğeler için gerçekleştirilir. Ancak bu özelliği, önbelleğe almayı tüm öğelere veya yalnızca içerik görünümünde görünen öğelere uygulayacak şekilde değiştirebilirsiniz.
Öğe Başvurularının Gücü
bir AutomationElementöğesini aldığınızda, önbelleğe alınmamış olanlar da dahil olmak üzere, bu öğenin tüm özelliklerine ve desenlerine varsayılan olarak erişebilirsiniz. Ancak, daha fazla verimlilik için öğesinin özelliğini CacheRequestNoneolarak ayarlayarak AutomationElementMode öğesine yapılan başvurunun yalnızca önbelleğe alınmış verilere başvurduğunu belirtebilirsiniz. Bu durumda, önbelleğe alınmamış özelliklere ve alınan öğelerin desenlerine erişiminiz yoktur. Başka bir deyişle, aracılığıyla veya Current
özelliği veya herhangi bir denetim deseni AutomationElement aracılığıyla GetCurrentPropertyValue herhangi bir özelliğe erişemezsiniz; veya TryGetCurrentPatternkullanarak GetCurrentPattern bir desen alamazsınız. Önbelleğe alınan desenlerde, gibi SelectionPattern.SelectionPatternInformation.GetSelectiondizi özelliklerini alan yöntemleri çağırabilirsiniz, ancak denetim üzerinde eylem gerçekleştiren yöntemleri çağıramayın, örneğin InvokePattern.Invoke.
Nesnelere tam başvuru gerekmeyebilecek bir uygulamaya örnek olarak, bir penceredeki Name öğelerin ve ControlType özelliklerinin önceden eklendiği ancak nesnelerin kendilerine gerek AutomationElement duymayabileceği bir ekran okuyucu verilmiştir.
CacheRequest'i Etkinleştirme
Önbelleğe Alma yalnızca AutomationElement geçerli iş parçacığı için etkinken CacheRequest nesneler alındığında gerçekleştirilir. bir CacheRequestöğesini etkinleştirmenin iki yolu vardır.
Her zamanki gibi çağrısı Activateyapmaktır. Bu yöntem uygulayan IDisposablebir nesnesi döndürür. nesne mevcut olduğu IDisposable sürece istek etkin kalır. Nesnenin ömrünü denetlemenin en kolay yolu, çağrıyı bir using
(C#) veya Using
(Visual Basic) bloğunun içine almaktır. Bu, özel durum oluşturulsa bile isteğin yığından çıkarılmasını sağlar.
Önbellek isteklerini iç içe almak istediğinizde yararlı olan bir diğer yol da çağrısı Pushyapmaktır. Bu, isteği bir yığına yerleştirir ve etkinleştirir. tarafından yığından Popkaldırılana kadar istek etkin kalır. Yığına başka bir istek gönderilirse istek geçici olarak devre dışı bırakılır; yalnızca yığındaki en üstteki istek etkindir.
Önbelleğe Alınan Özellikleri Alma
Aşağıdaki yöntemler ve özellikler aracılığıyla bir öğenin önbelleğe alınmış özelliklerini alabilirsiniz.
İstenen özellik önbellekte değilse bir özel durum oluşturulur.
Cachedgibi Current, tek tek özellikleri bir yapının üyeleri olarak kullanıma sunar. Ancak, bu yapıyı almanız gerekmez; tek tek özelliklere doğrudan erişebilirsiniz. Örneğin, Name özelliği ile element.Cached.Name
elde edilebilir. Burada element
bir AutomationElement.
Önbelleğe Alınmış Denetim Desenlerini Alma
Aşağıdaki yöntemlerle bir öğenin önbelleğe alınmış denetim desenlerini alabilirsiniz.
Desen önbellekte değilse, GetCachedPattern bir özel durum oluşturur ve TryGetCachedPattern döndürür false
.
Desen nesnesinin özelliğini kullanarak bir denetim deseninin Cached
önbelleğe alınmış özelliklerini alabilirsiniz. Ayrıca özelliği aracılığıyla Current
geçerli değerleri de alabilirsiniz, ancak yalnızca değeri alındığında AutomationElement belirtilmemişseNone. (Full varsayılan değerdir ve geçerli değerlere erişim izni verir.)
Önbelleğe Alınmış Alt Öğeleri ve Ebeveynleri Alma
İsteğin özelliği aracılığıyla TreeScope bu öğenin alt öğeleri için bir AutomationElement ve önbelleğe alma isteği aldığınızda, daha sonra alt öğeleri aldığınız öğenin özelliğinden CachedChildren almak mümkündür.
Önbellek isteğinin kapsamına dahil edildiyse Element , isteğin kök öğesi daha sonra alt öğelerden herhangi birinin özelliğinden CachedParent kullanılabilir.
Not
İsteğin kök öğesinin ana veya alt öğelerini önbelleğe alamazsınız.
Önbelleği Güncelleştirme
Önbellek yalnızca kullanıcı arabiriminde hiçbir şey değişmediği sürece geçerlidir. Uygulamanız genellikle olaylara yanıt olarak önbelleği güncelleştirmekten sorumludur.
etkinken CacheRequest bir olaya abone olursanız, olay işleyicisi temsilciniz her çağrıldığında olayın kaynağı olarak güncelleştirilmiş bir önbellek içeren bir AutomationElement alırsınız. Öğesini çağırarak GetUpdatedCachebir öğenin önbelleğe alınmış bilgilerini de güncelleştirebilirsiniz. Daha önce önbelleğe alınmış tüm bilgileri güncelleştirmek için özgün CacheRequest dosyayı geçirebilirsiniz.
Önbelleğin güncelleştirilmesi, mevcut AutomationElement başvuruların özelliklerini değiştirmez.