Aracılığıyla paylaş


UI Otomasyonu İstemcilerinde Önbelleğe Alma

Uyarı

Bu belgeler, System.Windows.Automation ad alanında tanımlanan yönetilen UI Otomasyonu sınıflarını kullanmak isteyen .NET Framework geliştiricilerine 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 özelliklerinin ve denetim desenlerinin önbelleğe alınması tanıtılmaktadır.

UI Otomasyonu'nda ö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 taraflı kullanıcı arabirimi otomasyonu sağlayıcılarına sahip Windows Presentation Foundation (WPF) denetimleri ve özel denetimlerde 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 CacheRequest etkinleştirdiğinde ve ardından bir AutomationElement döndüren herhangi bir yöntem veya özellik, örneğin FindFirst veya FindAll, kullandığında gerçekleşir. TreeWalker sınıfının yöntemleri bir istisnadır; önbelleğe alma, yalnızca bir CacheRequest parametre olarak belirtilmişse (örneğin, TreeWalker.GetFirstChild(AutomationElement, CacheRequest)) yapılır.

Önbelleğe alma, CacheRequest aktifken bir olaya abone olduğunuzda da gerçekleşir. Olaylarınızın işleyicisine olayın kaynağı olarak geçirilen AutomationElement, özgün CacheRequest tarafı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 aktifken 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 Element özelliğine TreeScope eklemeniz gerekir. Kapsamı Parent veya Ancestorsolarak ayarlamak mümkün değildir. Ancak, bir alt öğe önbelleğe alındığında, üst öğe de önbelleğe alınabilir. Daha fazla bilgi için bakınız Önbelleğe Alınmış Alt Öğeleri ve Ebeveynleri Alma.

Önbelleğe alma kapsamı, CacheRequest.TreeFilter özelliğinden 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 AutomationElementModeCacheRequestolarak ayarlayarak None öğ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. Bu, GetCurrentPropertyValue veya Current özelliği ya da herhangi bir denetim deseni aracılığıyla AutomationElement üzerinde hiçbir özelliğe erişemeyeceğiniz anlamına gelir; GetCurrentPattern veya TryGetCurrentPattern kullanarak da bir deseni alamazsınız. Önbelleğe alınan desenlerde, örneğin SelectionPattern.SelectionPatternInformation.GetSelection gibi dizi özelliklerini alan yöntemleri çağırabilirsiniz, ancak denetim üzerinde eylem gerçekleştiren yöntemleri, örneğin InvokePattern.Invoke, çağıramazsınız.

Nesnelere tam başvuru gerekmeyebilecek bir uygulamaya örnek olarak, bir ekran okuyucu verilmiştir. Bu ekran okuyucu, bir penceredeki Name öğelerin ve ControlType özelliklerinin önceden alınmasını sağlar ancak AutomationElement nesnelerin kendilerine gereksinim duymaz.

CacheRequest'i Etkinleştirme

Önbelleğe alma yalnızca AutomationElement geçerli iş parçacığı için aktifken CacheRequest nesneler alındığında gerçekleştirilir. bir CacheRequestöğesini etkinleştirmenin iki yolu vardır.

Her zamanki gibi Activate çağırmaktı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 Push çağrısı yapmaktır. Bu, isteği bir yığına yerleştirir ve etkinleştirir. Yığından Pop tarafından kaldı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.

Cached, Current gibi, bireysel özellikleri bir yapının üyeleri olarak ortaya çıkarır. Ancak, bu yapıyı almanız gerekmez; tek tek özelliklere doğrudan erişebilirsiniz. Örneğin, Name özelliği element.Cached.Name'den elde edilebilir, burada element bir AutomationElement'dür.

Ö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 geçerli değerleri Current özelliği aracılığıyla alabilirsiniz, ancak None değeri alındığında AutomationElement belirtilmemişse yalnızca. (Full varsayılan değerdir ve geçerli değerlere erişim izni verir.)

Önbelleğe Alınmış Çocuk Öğeleri ve Ebeveynleri Alma

Bir AutomationElement aldığınızda ve isteğin TreeScope özelliği aracılığıyla bu öğenin alt öğeleri için önbelleğe alma talebinde bulunduğunuzda, daha sonra, aldığınız öğenin CachedChildren özelliğinden alt öğeleri almak mümkündür.

Önbellek isteğinin kapsamına Element dahil edildiyse, isteğin kök öğesi daha sonra alt öğelerin herhangi birinin CachedParent özelliğinden kullanılabilir.

Uyarı

İ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.

CacheRequest aktifken bir olaya abone olursanız, olay işleyicisi temsilciniz çağrıldığında, olayın kaynağı olarak güncellenmiş bir önbelleğe sahip bir AutomationElement alırsınız. GetUpdatedCache çağırarak bir öğenin önbelleğe alınmış bilgilerini de güncelleyebilirsiniz. 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.

Ayrıca bakınız