CoSetMessageDispatcher 函数 (messagedispatcherapi.h)

注册或注销每线程消息调度程序,当 ASTA 线程上的 COM 等待 API 中存在可用于调度的窗口消息时,将调用该消息调度程序。 此函数通常由 CoreWindow 调用,但在某些情况下,需要专门在 ASTA 线程上调度消息的其他组件也可以调用此函数。

语法

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

parameters

[in, optional] pMessageDispatcher

如果不是 null,则为要注册的消息调度程序对象。 此对象还必须实现 IWeakReferenceSource。 如果为 null,则注销当前消息调度程序。

返回值

如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。

注解

此函数仅在 ASTA 线程中受支持。 尝试在非 ASTA 线程上设置消息调度程序的无提示失败,没有副作用。

尝试设置未实现 IWeakReferenceSource 的对象以无提示方式失败,没有副作用。

使用有效和非 null pMessageDispatcher 参数对此函数的调用会注册此对象,以接收 PumpMessages 回调,只要该 ASTA 线程上存在可以使用 COM 等待 API 调度的窗口消息。 保留对此对象的Windows 运行时弱引用,对象接收回调,直到替换注册或 ASTA 未初始化。 每次调用此函数都会替换以前注册的消息调度程序(如果有)。

如果在 ASTA 线程上注册了消息调度程序或检索以前注册的消息调度程序,则无法检查。 仅在已知不会与其他注册发生冲突的情况下调用此函数,具体而言:

  • 在 Windows 应用商店应用 UI 线程中,CoreWindow 调用此函数来注册其调度程序。 其他组件不应在这些线程上调用此函数。
  • UI 框架可能支持创作模式,即应用程序在桌面环境中运行,因此其 UI 线程中没有 CoreWindow。 为了代替 CoreWindow 支持,这些 UI 框架可以在 UI 线程上注册消息调度程序,以处理通常由 CoreWindow (处理的特殊窗口消息处理,例如加速器) 。 如果 UI 框架不需要此功能,则不需要调用此函数。
  • IAppVisibility 浏览器不限于 Windows 应用商店应用 API,因此可以使用 user32 API 处理自己的自定义窗口消息。 但是,这些应用程序仍具有应用对象提供的 ASTA UI 线程,并且可能会注册消息调度程序来处理此特殊处理。 如果浏览器不需要此功能,则不需要调用此函数。
IAppVisibility 浏览器需要谨慎避免 CoreWindow 替换浏览器的消息调度程序。 假定浏览器不需要 CoreWindow 的调度程序。 浏览器应不早于其 IViewProvider::Initialize 调用 CoSetMessageDispatcher,或者,对于实现 IInitializeWithWindowFactory 的视图,应在在线程上创建窗口之后调用 CoSetMessageDispatcher

要求

   
目标平台 Windows
标头 messagedispatcherapi.h

另请参阅

IAppVisibility