Freigeben über


CoSetMessageDispatcher-Funktion (messagedispatcherapi.h)

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

Syntax

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

Parameter

[in, optional] pMessageDispatcher

Wenn der Wert nicht NULL ist, muss das Nachrichtenverteilerobjekt registriert werden. Dieses Objekt muss auch IWeakReferenceSource implementieren. Wenn NULL ist, hebt die Registrierung des aktuellen Nachrichtenverteilers auf.

Rückgabewert

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

Hinweise

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

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

Ein Aufruf dieser Funktion mit einem gültigen und nicht null-pMessageDispatcher-Parameter registriert dieses Objekt, um einen PumpMessages-Rückruf zu empfangen, wenn Fensternachrichten für den Versand mit COM-Warte-APIs in diesem ASTA-Thread verfügbar sind. Ein Windows-Runtime schwachen Verweis auf dieses Objekt wird gehalten, und das Objekt empfängt Rückrufe, bis die Registrierung ersetzt oder die ASTA aufgehoben wird. Jeder Aufruf dieser Funktion ersetzt ggf. den zuvor registrierten Nachrichtenverteiler.

Es gibt keine Möglichkeit, zu überprüfen, ob ein Nachrichtenverteiler in einem ASTA-Thread registriert ist, oder einen zuvor registrierten Nachrichtenverteiler abzurufen. Diese Funktion sollte nur unter Umständen aufgerufen werden, in 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. Keine anderen Komponenten sollten diese Funktion für diese Threads 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 enthalten. Anstelle der CoreWindow-Unterstützung registrieren diese UI-Frameworks möglicherweise einen Nachrichtenverteiler in UI-Threads, um spezielle Fensternachrichtenverarbeitung zu verarbeiten, die normalerweise von CoreWindow (z. B. Beschleuniger) verarbeitet wird. Es ist nicht erforderlich, diese Funktion aufzurufen, wenn das Ui-Framework 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 Nachrichtenverteiler 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 Sorgfalt, um zu vermeiden, dass CoreWindow den Nachrichtenverteiler des Browsers ersetzt. Es wird davon ausgegangen, dass der Browser keinen CoreWindow-Dispatcher benötigt. Der Browser sollte CoSetMessageDispatcher frühestens als seinen IViewProvider::Initialize aufrufen, oder bei Ansichten, die IInitializeWithWindowFactory implementieren, frühestens nach dem Erstellen eines Fensters im Thread.

Requirements (Anforderungen)

   
Zielplattform Windows
Kopfzeile messagedispatcherapi.h

Weitere Informationen

IAppVisibility