Menjaga Terhadap Reentrancy dalam Fungsi Hook

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

Misalnya, pertimbangkan kasus di mana fungsi hook dalam program pembaca layar memproses peristiwa EVENT_OBJECT_VALUECHANGE untuk kontrol edit. 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 hook memanggil fungsi yang menyebabkan antrean pesan utas pemilik diperiksa. Ini terjadi ketika salah satu dari berikut ini dipanggil dalam fungsi hook:

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