Event Freezing
Ein Container kann ein Steuerelement benachrichtigen, dass es nicht bereit ist, auf Ereignisse zu reagieren, indem er IOleControl::FreezeEvents mit TRUE aufruft. Die Ereignisse können durch Aufrufen von FreezeEvents mit FALSE entsperrt werden. Wenn ein Container Ereignisse einfriert, wird die Ereignisverarbeitung eingefroren, nicht der Ereignis empfangen. Das heißt, ein Container kann weiterhin Ereignisse empfangen, während Ereignisse eingefroren sind. Wenn ein Container eine Ereignisbenachrichtigung empfängt, während seine Ereignisse fixiert sind, sollte der Container das Ereignis ignorieren. Es ist keine andere Aktion geeignet.
Ein Steuerelement sollte den Aufruf eines Containers an FreezeEvents mit TRUE notieren, wenn es für das Steuerelement wichtig ist, dass ein Ereignis nicht übersehen wird. Während die Ereignisverarbeitung eines Containers eingefroren ist, sollte ein Steuerelement eine der folgenden Techniken implementieren:
- Geben Sie die Ereignisse in der vollständigen Kenntnis aus, dass der Container keine Maßnahmen ergreifen wird.
- Verwerfen Sie alle Ereignisse, die das Steuerelement ausgelöst hätte.
- Stellen Sie alle ausstehenden Ereignisse in die Warteschlange, und geben Sie sie aus, nachdem der Container FreezeEvents mit FALSE aufgerufen hat.
- Stellen Sie nur relevante oder wichtige Ereignisse in die Warteschlange ein, und geben Sie sie aus, nachdem der Container FreezeEvents mit FALSE aufgerufen hat.
Jede Technik ist unter verschiedenen Umständen akzeptabel und angemessen. Der Steuerelemententwickler ist dafür verantwortlich, die geeignete Technik für die Funktionalität des Steuerelements zu bestimmen und zu implementieren.