Поделиться через


Функция CoSetMessageDispatcher (messagedispatcherapi.h)

Регистрирует или отменяет регистрацию диспетчера сообщений для каждого потока, который вызывается при наличии оконных сообщений, доступных для отправки в API ожидания COM в потоке ASTA. Эта функция обычно вызывается CoreWindow, но в некоторых случаях другие компоненты, которым требуется специализировать способ отправки сообщений в потоке ASTA, также могут вызывать эту функцию.

Синтаксис

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

Параметры

[in, optional] pMessageDispatcher

Если значение не равно NULL, регистрируется объект диспетчера сообщений. Этот объект также должен реализовывать IWeakReferenceSource. Если значение равно null, отменяет регистрацию текущего диспетчера сообщений.

Возвращаемое значение

Если эта функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Эта функция поддерживается только в потоках ASTA. Попытка настроить диспетчер сообщений в потоке, отличном от ASTA, завершается без каких-то побочных эффектов.

Попытка задать объект, который не реализует IWeakReferenceSource , автоматически завершается сбоем без побочных эффектов.

Вызов этой функции с допустимым и ненулевым параметром pMessageDispatcher регистрирует этот объект для получения обратного вызова PumpMessages при наличии сообщений окна, доступных для отправки с ПОМОЩЬЮ API ожидания COM в этом потоке ASTA. Среда выполнения Windows слабая ссылка на этот объект удерживается, и объект получает обратные вызовы, пока регистрация не будет заменена или ASTA не инициализирована. Каждый вызов этой функции заменяет ранее зарегистрированный диспетчер сообщений, если таковой имеется.

Невозможно проверка, зарегистрирован ли диспетчер сообщений в потоке ASTA, или получить ранее зарегистрированный диспетчер сообщений. Эту функцию следует вызывать только в тех случаях, когда известно, что она не столкнется с другой регистрацией, в частности:

  • В потоках пользовательского интерфейса приложения Магазина Windows эта функция вызывается CoreWindow для регистрации диспетчера. Никакие другие компоненты не должны вызывать эту функцию в этих потоках.
  • Платформы пользовательского интерфейса могут поддерживать режим разработки, в котором приложения выполняются в среде рабочего стола и, следовательно, не имеют CoreWindow в потоках пользовательского интерфейса. Вместо поддержки CoreWindow эти платформы пользовательского интерфейса могут регистрировать диспетчер сообщений в потоках пользовательского интерфейса для обработки специальных окон сообщений, обычно обрабатываемых CoreWindow (например, ускорителями). Если платформа пользовательского интерфейса не нуждается в этой функции, вызывать эту функцию не требуется.
  • Браузеры IAppVisibility не ограничены API приложений Магазина Windows и поэтому могут иметь собственную пользовательскую обработку сообщений окна с помощью API-интерфейсов user32. Однако эти приложения по-прежнему имеют потоки пользовательского интерфейса ASTA, предоставляемые объектом приложения, и могут зарегистрировать диспетчер сообщений для обработки этой специальной обработки. Если в браузере нет необходимости в этой функции, вызывать эту функцию не требуется.
В случае браузеров IAppVisibility требуется осторожность, чтобы избежать замены CoreWindow диспетчера сообщений браузера. Предполагается, что браузер не нуждается в диспетчере CoreWindow. Браузер должен вызывать CoSetMessageDispatcher не раньше, чем его IViewProvider::Initialize, или, в случае представлений, реализующих IInitializeWithWindowFactory, не ранее, чем после создания окна в потоке.

Требования

   
Целевая платформа Windows
Header messagedispatcherapi.h

См. также раздел

IAppVisibility