Compartir a través de


Función CoSetMessageDispatcher (messagedispatcherapi.h)

Registra o anula el registro del distribuidor de mensajes por subproceso que se va a invocar cuando hay mensajes de ventana disponibles para enviar dentro de las API de espera COM en un subproceso de ASTA. CoreWindow suele llamar a esta función, pero en determinadas circunstancias otros componentes que necesitan especializar cómo se envían los mensajes en un subproceso de ASTA también pueden llamar a esta función.

Sintaxis

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

Parámetros

[in, optional] pMessageDispatcher

Si no es null, el objeto de distribuidor de mensajes que se va a registrar. Este objeto también debe implementar IWeakReferenceSource. Si es null, anula el registro del distribuidor de mensajes actual.

Valor devuelto

Si esta función se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT.

Comentarios

Esta función solo se admite en subprocesos de ASTA. Se produce un error en un intento de establecer el distribuidor de mensajes en un subproceso que no es de ASTA de forma silenciosa sin efectos secundarios.

Se produce un error en un intento de establecer un objeto que no implementa IWeakReferenceSource de forma silenciosa sin efectos secundarios.

Una llamada a esta función con un parámetro pMessageDispatcher válido y distinto de null registra este objeto para recibir una devolución de llamada pumpMessages siempre que haya mensajes de ventana disponibles para enviar con LAS API de espera COM en ese subproceso de ASTA. Una Windows Runtime referencia débil a este objeto se mantiene y el objeto recibe devoluciones de llamada, hasta que el registro se reemplaza o el ASTA no inicializado. Cada llamada a esta función reemplaza al distribuidor de mensajes registrado anteriormente, si existe.

No hay ninguna manera de comprobar si un distribuidor de mensajes está registrado en un subproceso de ASTA o para recuperar un distribuidor de mensajes registrado anteriormente. Esta función solo debe llamarse en circunstancias en las que se sepa que esto no colisionará con otro registro, en concreto:

  • En los subprocesos de la interfaz de usuario de la aplicación de la Tienda Windows, CoreWindow llama a esta función para registrar su distribuidor. Ningún otro componente debe llamar a esta función en estos subprocesos.
  • Los marcos de interfaz de usuario pueden admitir un modo de creación, en el que las aplicaciones se ejecutan en el entorno de escritorio y, por lo tanto, no tienen coreWindow en sus subprocesos de interfaz de usuario. En lugar de la compatibilidad con CoreWindow, estos marcos de interfaz de usuario pueden registrar un distribuidor de mensajes en subprocesos de interfaz de usuario para controlar el procesamiento especial de mensajes de ventana normalmente controlado por CoreWindow (como aceleradores). No es necesario llamar a esta función si el marco de trabajo de la interfaz de usuario no necesita esta funcionalidad.
  • Los exploradores IAppVisibility no están restringidos a las API de la aplicación de la Tienda Windows y, por tanto, pueden tener su propio procesamiento de mensajes de ventana personalizado mediante las API de user32. Sin embargo, estas aplicaciones siguen teniendo subprocesos de interfaz de usuario de ASTA, tal como lo proporciona el objeto de aplicación, y pueden registrar un distribuidor de mensajes para controlar este procesamiento especial. No es necesario llamar a esta función si el explorador no necesita esta funcionalidad.
El caso de los exploradores IAppVisibility requiere cuidado para evitar que CoreWindow reemplace el distribuidor de mensajes del explorador. Se supone que el explorador no necesita el distribuidor de CoreWindow. El explorador debe llamar a CoSetMessageDispatcher antes de su IViewProvider::Initialize o, en el caso de las vistas que implementan IInitializeWithWindowFactory, antes de que haya creado una ventana en el subproceso.

Requisitos

   
Plataforma de destino Windows
Encabezado messagedispatcherapi.h

Consulte también

IAppVisibility