CoSetMessageDispatcher 函数(messagedispatcherapi.h)

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

Syntax

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

参数

[in, optional] pMessageDispatcher

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

返回值

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

注解

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

尝试设置未实现 IWeakReferenceSource 的对象,无提示失败,且无副作用。

对具有有效和非 null pMessageDispatcher 参数的此函数的调用会注册此对象,每当有窗口消息可用于在该 ASTA 线程上使用 COM 等待 API 调度时接收 PumpMessages 回调。 保留对此对象的 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 的视图,该视图在线程上创建窗口后不会早于它。

要求

Requirement 价值
目标平台 Windows操作系统
Header messagedispatcherapi.h
Library Ole32.Lib

另请参阅

IAppVisibility