Защита от повторного входа в функции перехватчика

Хотя функция перехватчика обрабатывает событие, могут быть активированы дополнительные события, что может привести к повторному входите функцию обработчика до завершения обработки исходного события. Проблема с повторным входом в функции перехватчика заключается в том, что события завершаются вне последовательности, если функция перехватчика не обрабатывает эту ситуацию.

Например, рассмотрим случай, когда функция перехватчика в программе чтения с экрана обрабатывает событие EVENT_OBJECT_VALUECHANGE для элемента управления редактированием. Если при обработке первого события изменения значения функция обработчика повторно вводится для обработки последующего события изменения значения, то перед первым событием выполняется второе событие. Эта ситуация приводит к тому, что средство чтения с экрана передает пользователю неточные сведения.

Так как обработка событий прерывается, дополнительные события могут быть получены в любой момент, когда функция-обработчик вызывает функцию, которая вызывает очередь сообщений владеющего потока для проверки. Это происходит, когда любой из следующих вызовов вызывается в функции обработчика:

Поскольку функции перехватчика вызывают свойства и методы AccessibleObjectFromEvent и IAccessible , невозможно предотвратить повторный вход. Единственным решением является добавление кода в функцию перехватчика, которая обнаруживает повторный вход и принимает соответствующие меры при повторном вводе функции-перехватчика.