Freigeben über


CoSetMessageDispatcher-Funktion (messagedispatcherapi.h)

Registriert oder hebt die Registrierung des Nachrichtenverteilers pro Thread auf, der aufgerufen werden soll, wenn Fensternachrichten in COM-Wait-APIs in einem ASTA-Thread verteilt werden können. Diese Funktion wird in der Regel von CoreWindow aufgerufen, aber unter bestimmten Umständen können auch andere Komponenten, die darauf spezialisiert werden müssen, wie Nachrichten in einem ASTA-Thread verteilt werden, diese Funktion aufrufen.

Syntax

void CoSetMessageDispatcher(
  [in, optional] PMessageDispatcher pMessageDispatcher
);

Die Parameter

[in, optional] pMessageDispatcher

Wenn kein Nullwert ist, wird das zu registrierende Nachrichtenverteilerobjekt verwendet. Dieses Objekt muss auch IWeakReferenceSource implementieren. Wenn NULL, heben Sie die Registrierung des aktuellen Nachrichtenteilers auf.

Rückgabewert

Wenn diese Funktion erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein HRESULT-Fehlercode zurückgegeben.

Bemerkungen

Diese Funktion wird nur in ASTA-Threads unterstützt. Ein Versuch, den Nachrichtenverteiler in einem Nicht-ASTA-Thread im Hintergrund festzulegen, schlägt ohne Nebenwirkungen fehl.

Ein Versuch, ein Objekt festzulegen, das IWeakReferenceSource nicht implementiert, schlägt ohne Nebenwirkungen fehl.

Ein Aufruf dieser Funktion mit einem gültigen und nicht nulligen pMessageDispatcher-Parameter registriert dieses Objekt, um einen PumpMessages-Rückruf zu empfangen, wenn Fenstermeldungen verfügbar sind, die mit COM-Wait-APIs in diesem ASTA-Thread verteilt werden können. Ein schwacher Verweis auf dieses Objekt in Windows-Runtime wird gehalten, und das Objekt empfängt Rückrufe, bis die Registrierung ersetzt oder die ASTA nicht initialisiert wird. Jeder Aufruf dieser Funktion ersetzt ggf. den zuvor registrierten Nachrichtenteiler.

Es gibt keine Möglichkeit zu überprüfen, ob ein Nachrichten dispatcher in einem ASTA-Thread registriert ist oder einen zuvor registrierten Nachrichten dispatcher abruft. Diese Funktion sollte nur unter Umständen aufgerufen werden, unter denen bekannt ist, dass dies nicht mit einer anderen Registrierung kollidiert, insbesondere:

  • In Windows Store-App-UI-Threads wird diese Funktion von CoreWindow aufgerufen, um den Verteiler zu registrieren. Für diese Threads sollten keine anderen Komponenten diese Funktion aufrufen.
  • Benutzeroberflächenframeworks unterstützen möglicherweise einen Erstellungsmodus, in dem Anwendungen in der Desktopumgebung ausgeführt werden und daher keinen CoreWindow in ihren UI-Threads aufweisen. Anstelle der CoreWindow-Unterstützung können diese UI-Frameworks einen Nachrichtenverteiler in UI-Threads registrieren, um spezielle Fensternachrichtenverarbeitungen zu verarbeiten, die in der Regel von CoreWindow (z. B. Zugriffstasten) behandelt werden. Es ist nicht erforderlich, diese Funktion aufzurufen, wenn das Benutzeroberflächenframework diese Funktionalität nicht benötigt.
  • IAppVisibility-Browser sind nicht auf die Windows Store-App-APIs beschränkt und verfügen daher möglicherweise über eine eigene benutzerdefinierte Fensternachrichtenverarbeitung mithilfe von User32-APIs. Diese Anwendungen verfügen jedoch weiterhin über ASTA-UI-Threads, die vom App-Objekt bereitgestellt werden, und können einen Nachrichtenteiler registrieren, um diese spezielle Verarbeitung zu verarbeiten. Es ist nicht erforderlich, diese Funktion aufzurufen, wenn der Browser diese Funktionalität nicht benötigt.
Der Fall von IAppVisibility-Browsern erfordert, dass CoreWindow den Nachrichten-Dispatcher des Browsers ersetzt. Es wird davon ausgegangen, dass der Browser keine Notwendigkeit für den Verteiler von CoreWindow hat. Der Browser sollte "CoSetMessageDispatcher " nicht früher als "IViewProvider::Initialize" aufrufen oder im Fall von Ansichten, die IInitializeWithWindowFactory implementieren, nicht früher als nach dem Erstellen eines Fensters im Thread.

Anforderungen

Anforderung Wert
Zielplattform Fenster
Header messagedispatcherapi.h
Library Ole32.Lib

Siehe auch

IAppVisibility