CoSetMessageDispatcher 函式 (messagedispatcherapi.h)
註冊或取消註冊要在 ASTA 執行緒上的 COM 等候 API 內分派的視窗訊息時叫用的個別執行緒訊息發送器。 此函式通常是由 CoreWindow 呼叫,但在某些情況下,需要特製化 ASTA 執行緒上如何分派訊息的其他元件也可以呼叫此函式。
語法
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 執行緒,而且可能會註冊訊息發送器來處理此特殊處理。 如果瀏覽器不需要此功能,則不需要呼叫此函式。
需求
目標平台 | Windows |
標頭 | messagedispatcherapi.h |