Partager via


CoSetMessageDispatcher, fonction (messagedispatcherapi.h)

Inscrit ou annule l’inscription du répartiteur de messages par thread qui doit être appelé lorsqu’il existe des messages de fenêtre disponibles pour la distribution dans les API d’attente COM sur un thread ASTA. Cette fonction est généralement appelée par CoreWindow, mais dans certaines circonstances, d’autres composants qui doivent se spécialiser dans la façon dont les messages sont distribués sur un thread ASTA peuvent également appeler cette fonction.

Syntaxe

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

Paramètres

[in, optional] pMessageDispatcher

Si la valeur n’est pas null, objet de répartiteur de messages à inscrire. Cet objet doit également implémenter IWeakReferenceSource. Si la valeur est null, annule l’inscription du répartiteur de messages actuel.

Valeur retournée

Si cette fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Notes

Cette fonction est prise en charge uniquement dans les threads ASTA. Une tentative de définition du répartiteur de messages sur un thread non ASTA échoue silencieusement sans effets secondaires.

Une tentative de définition d’un objet qui n’implémente pas IWeakReferenceSource en mode silencieux échoue sans effets secondaires.

Un appel à cette fonction avec un paramètre pMessageDispatcher valide et non null inscrit cet objet pour recevoir un rappel PumpMessages chaque fois qu’il existe des messages de fenêtre disponibles à distribuer avec les API d’attente COM sur ce thread ASTA. Une Windows Runtime référence faible à cet objet est conservée et l’objet reçoit des rappels, jusqu’à ce que l’inscription soit remplacée ou que l’ASTA soit non initialisé. Chaque appel à cette fonction remplace le répartiteur de messages précédemment inscrit, le cas échéant.

Il n’existe aucun moyen de case activée si un répartiteur de messages est inscrit sur un thread ASTA ou de récupérer un répartiteur de messages précédemment inscrit. Cette fonction ne doit être appelée que dans les circonstances où l’on sait qu’elle n’entre pas en conflit avec une autre inscription, en particulier :

  • Dans les threads d’interface utilisateur d’application du Windows Store, cette fonction est appelée par CoreWindow pour inscrire son répartiteur. Aucun autre composant ne doit appeler cette fonction sur ces threads.
  • Les infrastructures d’interface utilisateur peuvent prendre en charge un mode de création, dans lequel les applications sont exécutées dans l’environnement de bureau et n’ont donc pas de CoreWindow dans leurs threads d’interface utilisateur. Au lieu de la prise en charge de CoreWindow, ces infrastructures d’interface utilisateur peuvent inscrire un répartiteur de messages sur les threads d’interface utilisateur pour gérer le traitement des messages de fenêtre spéciale généralement géré par CoreWindow (par exemple, les accélérateurs). Il n’est pas nécessaire d’appeler cette fonction si l’infrastructure d’interface utilisateur n’a pas besoin de cette fonctionnalité.
  • Les navigateurs IAppVisibility ne sont pas limités aux API d’application du Windows Store et peuvent donc avoir leur propre traitement des messages de fenêtre personnalisée à l’aide des API user32. Toutefois, ces applications ont toujours des threads d’interface utilisateur ASTA fournis par l’objet d’application et peuvent inscrire un répartiteur de messages pour gérer ce traitement spécial. Il n’est pas nécessaire d’appeler cette fonction si le navigateur n’a pas besoin de cette fonctionnalité.
Le cas des navigateurs IAppVisibility nécessite une attention particulière pour éviter que CoreWindow ne remplace le répartiteur de messages du navigateur. Il est supposé que le navigateur n’a pas besoin du répartiteur de CoreWindow. Le navigateur doit appeler CoSetMessageDispatcher pas plus tôt que son IViewProvider::Initialize, ou, dans le cas des vues qui implémentent IInitializeWithWindowFactory, pas plus tôt qu’après la création d’une fenêtre sur le thread.

Spécifications

   
Plateforme cible Windows
En-tête messagedispatcherapi.h

Voir aussi

IAppVisibility