Bagikan melalui


Menjaga Terhadap Reentransi dalam Fungsi Kait

Sementara fungsi kait memproses peristiwa, peristiwa tambahan dapat dipicu, yang dapat menyebabkan fungsi kait masuk kembali sebelum pemrosesan untuk peristiwa asli selesai. Masalah dengan reentrancy dalam fungsi kait adalah bahwa peristiwa selesai secara berurutan kecuali fungsi kait menangani situasi ini.

Misalnya, pertimbangkan kasus di mana fungsi kait dalam program pembaca layar memproses peristiwa EVENT_OBJECT_VALUECHANGE untuk kontrol pengeditan. Jika, saat memproses peristiwa perubahan nilai pertama, fungsi kait dimasukkan kembali untuk memproses peristiwa perubahan nilai berikutnya, peristiwa kedua selesai sebelum peristiwa pertama. Situasi ini menghasilkan pembaca layar yang menyampaikan informasi yang tidak akurat kepada pengguna.

Karena pemrosesan peristiwa terganggu, peristiwa tambahan mungkin diterima setiap kali fungsi kait memanggil fungsi yang menyebabkan antrean pesan utas pemilik diperiksa. Ini terjadi ketika salah satu hal berikut dipanggil dalam fungsi kait:

Karena fungsi kait memanggil properti dan metode AccessibleObjectFromEvent dan IAccessible , tidak mungkin untuk mencegah reentrancy. Satu-satunya solusi adalah bagi pengembang klien untuk menambahkan kode dalam fungsi kait yang mendeteksi reentransi dan mengambil tindakan yang tepat jika fungsi kait dimasukkan kembali.