Congelación de eventos

Un contenedor puede notificar a un control que no está listo para responder a eventos llamando a IOleControl::FreezeEvents con TRUE. Puede descongelar los eventos llamando a FreezeEvents con FALSE. Cuando un contenedor inmoviliza eventos, se bloquea el procesamiento de eventos, no la recepción de eventos; es decir, un contenedor todavía puede recibir eventos mientras se inmovilizan los eventos. Si un contenedor recibe una notificación de eventos mientras se inmovilizan sus eventos, el contenedor debe omitir el evento. Ninguna otra acción es adecuada.

Un control debe tomar nota de la llamada de un contenedor a FreezeEvents con TRUE si es importante para el control que no se pierde un evento. Mientras el procesamiento de eventos de un contenedor está inmovilizado, un control debe implementar una de las técnicas siguientes:

  • Active los eventos en el conocimiento completo de que el contenedor no realizará ninguna acción.
  • Descarte todos los eventos que el control habría desencadenado.
  • Poner en cola todos los eventos pendientes y desencadenarlos después de que el contenedor haya llamado FreezeEvents con FALSE.
  • Poner en cola solo los eventos relevantes o importantes y desencadenarlos después de que el contenedor haya llamado FreezeEvents con FALSE.

Cada técnica es aceptable y adecuada en diferentes circunstancias. El desarrollador del control es responsable de determinar e implementar la técnica adecuada para la funcionalidad del control.