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 프레임워크는 일반적으로 CoreWindow(예: 가속기)에서 처리하는 특수 창 메시지 처리를 처리하기 위해 UI 스레드에 메시지 디스패처를 등록할 수 있습니다. UI 프레임워크에 이 기능이 필요하지 않은 경우 이 함수를 호출할 필요가 없습니다.
  • IAppVisibility 브라우저는 Windows 스토어 앱 API로 제한되지 않으므로 user32 API를 사용하여 자체 사용자 지정 창 메시지 처리가 있을 수 있습니다. 그러나 이러한 애플리케이션에는 앱 개체에서 제공하는 ASTA UI 스레드가 여전히 있으며 이 특수 처리를 처리하기 위해 메시지 디스패처를 등록할 수 있습니다. 브라우저에 이 기능이 필요하지 않은 경우 이 함수를 호출할 필요가 없습니다.
IAppVisibility 브라우저의 경우 CoreWindow가 브라우저의 메시지 디스패처를 대체하지 않도록 주의해야 합니다. 브라우저에 CoreWindow의 디스패처가 필요하지 않은 것으로 가정합니다. 브라우저는 IViewProvider::Initialize보다 더 빨리 CoSetMessageDispatcher 를 호출하거나, IInitializeWithWindowFactory를 구현하는 뷰의 경우 스레드에 창을 만든 후 바로 호출해야 합니다.

요구 사항

   
대상 플랫폼 Windows
헤더 messagedispatcherapi.h

참고 항목

IAppVisibility