Condividi tramite


Funzione CoSetMessageDispatcher (messagedispatcherapi.h)

Registra o annulla la registrazione del dispatcher messaggi per thread che deve essere richiamato quando sono disponibili messaggi finestra per l'invio all'interno delle API di attesa COM in un thread ASTA. Questa funzione viene in genere chiamata da CoreWindow, ma in determinate circostanze altri componenti che devono specializzare il modo in cui i messaggi vengono inviati su un thread ASTA possono anche chiamare questa funzione.

Sintassi

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

Parametri

[in, optional] pMessageDispatcher

Se non null, l'oggetto dispatcher del messaggio da registrare. Questo oggetto deve anche implementare IWeakReferenceSource. Se null, annulla la registrazione del dispatcher del messaggio corrente.

Valore restituito

Se questa funzione ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT .

Commenti

Questa funzione è supportata solo nei thread ASTA. Un tentativo di impostare il dispatcher del messaggio su un thread non ASTA non ha esito negativo senza effetti collaterali.

Un tentativo di impostare un oggetto che non implementa IWeakReferenceSource non riesce automaticamente senza effetti collaterali.

Una chiamata a questa funzione con un parametro pMessageDispatcher valido e non null registra questo oggetto per ricevere un callback PumpMessages ogni volta che sono disponibili messaggi di finestra per l'invio con LE API di attesa COM su tale thread ASTA. Viene mantenuto un Windows Runtime riferimento debole a questo oggetto e l'oggetto riceve i callback, fino a quando la registrazione non viene sostituita o l'ASTA non inizializzata. Ogni chiamata a questa funzione sostituisce il dispatcher del messaggio registrato in precedenza, se presente.

Non è possibile verificare se un dispatcher di messaggi è registrato in un thread ASTA o per recuperare un dispatcher di messaggi registrato in precedenza. Questa funzione deve essere chiamata solo in circostanze in cui è noto che questo non sarà in conflitto con un'altra registrazione, in particolare:

  • Nei thread dell'interfaccia utente dell'app di Windows Store questa funzione viene chiamata da CoreWindow per registrare il dispatcher. Nessun altro componente deve chiamare questa funzione su questi thread.
  • I framework dell'interfaccia utente possono supportare una modalità di creazione, in cui le applicazioni vengono eseguite nell'ambiente desktop e pertanto non dispongono di coreWindow nei thread dell'interfaccia utente. Al posto del supporto di CoreWindow, questi framework dell'interfaccia utente possono registrare un dispatcher di messaggi nei thread dell'interfaccia utente per gestire l'elaborazione speciale dei messaggi della finestra in genere gestita da CoreWindow (ad esempio gli acceleratori). Non è necessario chiamare questa funzione se il framework dell'interfaccia utente non ha bisogno di questa funzionalità.
  • I browser IAppVisibility non sono limitati alle API dell'app di Windows Store e pertanto possono avere un'elaborazione personalizzata dei messaggi della finestra usando le API user32. Tuttavia, queste applicazioni hanno ancora thread dell'interfaccia utente ASTA come fornito dall'oggetto app e possono registrare un dispatcher di messaggi per gestire questa elaborazione speciale. Non è necessario chiamare questa funzione se il browser non ha bisogno di questa funzionalità.
Il caso dei browser IAppVisibility richiede attenzione per evitare CoreWindow di sostituire il dispatcher dei messaggi del browser. Si presuppone che il browser non abbia bisogno del dispatcher di CoreWindow. Il browser deve chiamare CoSetMessageDispatcher non prima del relativo IViewProvider::Initialize o, nel caso di visualizzazioni che implementano IInitializeWithWindowFactory, non prima che dopo aver creato una finestra nel thread.

Requisiti

   
Piattaforma di destinazione Windows
Intestazione messagedispatcherapi.h

Vedi anche

IAppVisibility