Event Freezing

A container can notify a control that it is not ready to respond to events by calling IOleControl::FreezeEvents(TRUE). It can un-freeze the events by calling IOleControl::FreezeEvents(FALSE). When a container freezes events, it is freezing event processing, not event receiving; that is, a container can still receive events while events are frozen. If a container receives an event notification while its events are frozen, the container should ignore the event. No other action is appropriate.

A control should take note of a container s call to IOleControl::FreezeEvents(TRUE) if it is important to the control that an event is not missed. While a container s event processing is frozen, a control should implement one of the following techniques:

  1.  Fire the events in the full knowledge that the container will take no action.

  2.  Discard all events that the control would have fired.

  3.  Queue up all pending events and fire them after the container has called IOleControl::FreezeEvents(FALSE).

  4.  Queue up only relevant or important events and fire them after the container has called IOleControl::FreezeEvents(FALSE).

 

Each technique is acceptable and appropriate in different circumstances. The control developer is responsible for determining and implementing the appropriate technique for the control s functionality.