Bagikan melalui


Caching pada Klien Otomasi Antarmuka Pengguna

Nota

Dokumentasi ini ditujukan untuk pengembang .NET Framework yang ingin menggunakan kelas Automation UI terkelola yang ditentukan dalam namespace System.Windows.Automation. Untuk informasi terbaru tentang Automasi UI, lihat Windows Automation API: UI Automation.

Topik ini memperkenalkan caching dari properti UI Automation dan pola kontrol.

Dalam Automasi UI, caching berarti pengambilan data di muka. Data kemudian dapat diakses tanpa komunikasi lintas proses lebih lanjut. Caching biasanya digunakan oleh aplikasi klien UI Automation untuk mengambil properti dan pola kontrol secara massal. Informasi kemudian diambil dari cache sesuai kebutuhan. Aplikasi memperbarui cache secara berkala, biasanya sebagai respons terhadap peristiwa yang menandakan bahwa sesuatu di antarmuka pengguna (UI) telah berubah.

Manfaat caching paling terlihat pada kontrol Windows Presentation Foundation (WPF) dan kontrol kustom yang memiliki penyedia Antarmuka Pengguna Otomatisasi di sisi server. Ada lebih sedikit manfaat saat mengakses penyedia sisi klien seperti penyedia default untuk kontrol Win32.

Cache terjadi ketika aplikasi mengaktifkan CacheRequest dan kemudian menggunakan metode atau properti apa pun yang mengembalikan AutomationElement; misalnya, FindFirst, FindAll. Metode kelas TreeWalker adalah pengecualian; caching hanya dilakukan jika CacheRequest ditentukan sebagai parameter (misalnya, TreeWalker.GetFirstChild(AutomationElement, CacheRequest)).

Penembolokan juga terjadi ketika Anda mengikuti sebuah event saat CacheRequest aktif. AutomationElement yang diteruskan ke penangan acara Anda sebagai sumber peristiwa berisi properti dan pola yang di-cache yang ditentukan oleh CacheRequest asli. Setiap perubahan yang dilakukan pada CacheRequest setelah Anda berlangganan event tidak akan berpengaruh.

Properti Automasi UI dan pola kontrol elemen dapat di-cache.

Opsi untuk Penyimpanan Sementara

CacheRequest menentukan opsi berikut untuk penyimpanan sementara.

Properti untuk Cache

Anda dapat menentukan properti untuk di-cache dengan memanggil Add(AutomationProperty) setiap properti sebelum mengaktifkan permintaan.

Pola Kontrol untuk Cache

Anda dapat menentukan pola kontrol ke cache dengan memanggil Add(AutomationPattern) setiap pola sebelum mengaktifkan permintaan. Ketika pola di-cache, propertinya tidak secara otomatis di-cache; Anda harus menentukan properti yang ingin Anda cache dengan menggunakan CacheRequest.Add.

Cakupan dan Pemfilteran Cache

Anda dapat menentukan elemen yang properti dan polanya ingin Anda cache dengan mengatur CacheRequest.TreeScope properti sebelum mengaktifkan permintaan. Cakupan relatif terhadap elemen yang diambil saat permintaan aktif. Misalnya, jika Anda hanya mengatur Children, dan kemudian mengambil AutomationElement, properti dan pola turunan dari elemen tersebut di-cache, tetapi bukan elemen itu sendiri. Untuk memastikan bahwa caching dilakukan untuk elemen yang diambil itu sendiri, Anda harus menyertakan Element di properti TreeScope. Tidak dimungkinkan untuk mengatur cakupan ke Parent atau Ancestors. Namun, elemen induk dapat di-cache ketika elemen anak di-cache. Untuk informasi selengkapnya, lihat Mengambil Anak dan Orang Tua yang Di-cache.

Tingkat caching juga dipengaruhi oleh properti CacheRequest.TreeFilter. Secara default, caching dilakukan hanya untuk elemen yang muncul dalam tampilan kontrol di pohon UI Automation. Namun, Anda dapat mengubah properti ini untuk menerapkan caching ke semua elemen, atau hanya ke elemen yang tampil pada tampilan konten.

Kekuatan Referensi Elemen

Saat Anda mengambil AutomationElement, secara default Anda memiliki akses ke semua properti dan pola elemen tersebut, termasuk yang tidak di-cache. Namun, untuk efisiensi yang lebih besar, Anda dapat menentukan bahwa referensi ke elemen hanya mengacu pada data yang di-cache, dengan mengatur AutomationElementMode properti ke CacheRequestNone. Dalam hal ini, Anda tidak memiliki akses ke properti dan pola elemen yang diambil yang tidak di-cache. Ini berarti Anda tidak dapat mengakses properti apa pun melalui GetCurrentPropertyValue atau Current properti dari AutomationElement atau pola kontrol apa pun; Anda juga tidak dapat mengambil pola dengan menggunakan GetCurrentPattern atau TryGetCurrentPattern. Pada pola yang di-cache, Anda dapat memanggil metode yang mengambil kembali properti array, seperti SelectionPattern.SelectionPatternInformation.GetSelection, tetapi tidak ada metode yang melakukan tindakan pada kendali, seperti InvokePattern.Invoke.

Contoh aplikasi yang mungkin tidak memerlukan referensi penuh ke objek adalah pembaca layar, yang akan memuat terlebih dahulu elemen dan properti Name dan ControlType di jendela tetapi tidak memerlukan objek AutomationElement itu sendiri.

Mengaktifkan CacheRequest

Penembolokan dilakukan hanya ketika objek AutomationElement diambil saat CacheRequest aktif untuk utas yang sedang berjalan. Ada dua cara untuk mengaktifkan CacheRequest.

Cara yang biasa adalah dengan memanggil Activate. Metode ini mengembalikan objek yang mengimplementasikan IDisposable. Permintaan tetap aktif selama IDisposable objek ada. Cara paling mudah untuk mengontrol masa pakai objek adalah dengan melingkupi panggilan dalam using, (C#), atau Using, (Visual Basic). Ini memastikan bahwa permintaan akan dihapus dari tumpukan bahkan jika terjadi pengecualian.

Cara lain, yang berguna ketika Anda ingin menumpuk permintaan cache, adalah dengan memanggil Push. Ini menempatkan permintaan pada tumpukan dan mengaktifkannya. Permintaan tetap aktif sampai dihapus dari tumpukan oleh Pop. Permintaan menjadi tidak aktif sementara jika permintaan lain didorong ke tumpukan; hanya permintaan teratas pada tumpukan yang aktif.

Mengambil Properti Cache

Anda dapat mengambil properti elemen yang di-cache melalui metode dan properti berikut.

Pengecualian dimunculkan jika properti yang diminta tidak ada di cache.

Cached, seperti Current, mengekspos properti individu sebagai anggota struktur. Namun, Anda tidak perlu mengambil struktur ini; Anda dapat mengakses properti individual secara langsung. Misalnya, Name properti dapat diperoleh dari element.Cached.Name, di mana element adalah AutomationElement.

Mengambil Pola Kontrol Memori Singgahan

Anda dapat mengambil pola kontrol cache elemen melalui metode berikut.

Jika pola tidak ada di cache, GetCachedPattern munculkan pengecualian, dan TryGetCachedPattern mengembalikan false.

Anda dapat mengambil properti yang di-cache dari pola kontrol dengan menggunakan properti Cached dari objek pola. Anda juga dapat mengambil nilai saat ini melalui Current properti, tetapi hanya jika None tidak ditentukan ketika AutomationElement diperoleh. (Full adalah nilai default, dan ini mengizinkan akses ke nilai saat ini.)

Mengambil Anak dan Orang Tua yang Di-cache

Ketika Anda mengambil AutomationElement dan meminta caching untuk anak-anak elemen tersebut melalui properti TreeScope dari permintaan, selanjutnya dimungkinkan untuk mendapatkan elemen anak dari properti CachedChildren elemen yang Anda ambil.

Jika Element disertakan dalam cakupan permintaan cache, elemen akar permintaan kemudian tersedia dari CachedParent properti salah satu elemen anak.

Nota

Anda tidak dapat menyimpan induk atau leluhur dari elemen root permintaan.

Memperbarui Cache

Cache hanya berlaku selama tidak ada perubahan di UI. Aplikasi Anda bertanggung jawab untuk memperbarui cache, biasanya sebagai respons terhadap peristiwa.

Jika Anda berlangganan suatu peristiwa saat CacheRequest aktif, Anda memperoleh AutomationElement dengan cache yang diperbarui sebagai sumber peristiwa setiap kali delegasi penangan acara Anda dipanggil. Anda juga dapat memperbarui informasi cache untuk elemen dengan memanggil GetUpdatedCache. Anda dapat meneruskan CacheRequest yang asli untuk memperbarui semua informasi yang telah di-cache sebelumnya.

Memperbarui cache tidak mengubah properti referensi yang ada AutomationElement .

Lihat juga