Metodo IMFMediaEventGenerator::BeginGetEvent (mfobjects.h)
Avvia una richiesta asincrona per l'evento successivo nella coda.
Sintassi
HRESULT BeginGetEvent(
[in] IMFAsyncCallback *pCallback,
[in] IUnknown *punkState
);
Parametri
[in] pCallback
Puntatore all'interfaccia IMFAsyncCallback di un oggetto callback. Il client deve implementare questa interfaccia.
[in] punkState
Puntatore all'interfaccia IUnknown di un oggetto di stato, definito dal chiamante. Questo parametro può essere NULL. È possibile utilizzare questo oggetto per contenere le informazioni sullo stato. L'oggetto viene restituito al chiamante quando viene richiamato il callback.
Valore restituito
Il metodo restituisce un valore HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.
Codice restituito | Descrizione |
---|---|
|
Il metodo è riuscito. |
|
Argomento puntatore NULL. |
|
È presente una richiesta in sospeso con lo stesso puntatore di callback e un oggetto di stato diverso. |
|
È presente una richiesta in sospeso con un puntatore di callback diverso. |
|
L'oggetto è stato arrestato. |
|
È presente una richiesta in sospeso con lo stesso puntatore di callback e lo stesso oggetto stato. |
Commenti
Quando è disponibile un nuovo evento, il generatore di eventi chiama il metodo IMFAsyncCallback::Invoke . Il metodo Invoke deve chiamare IMFMediaEventGenerator::EndGetEvent per ottenere un puntatore all'interfaccia IMFMediaEvent e usare tale interfaccia per esaminare l'evento.
Non chiamare BeginGetEvent una seconda volta prima di chiamare EndGetEvent. Mentre la prima chiamata è ancora in sospeso, le chiamate aggiuntive allo stesso oggetto avranno esito negativo. Inoltre, il metodo IMFMediaEventGenerator::GetEvent ha esito negativo se una richiesta asincrona è ancora in sospeso.
Esempio
Il codice seguente illustra un'implementazione tipica di IMFAsyncCallback::Invoke per il metodo BeginGetEvent . Il metodo Invoke chiama EndGetEvent per ottenere i dati dell'evento. Chiama quindi di nuovo BeginGetEvent per richiedere un altro evento.
//////////////////////////////////////////////////////////////////////
// Name: CEventHandler::Invoke
// Callback for asynchronous BeginGetEvent method.
//
// pAsyncResult: Pointer to the result.
//
// This code example assumes that CEventHandler is a class that
// implements the IMFAsyncCallback interface.
///////////////////////////////////////////////////////////////////////
HRESULT CEventHandler::Invoke(IMFAsyncResult *pAsyncResult)
{
HRESULT hr = S_OK;
IMFMediaEvent* pEvent = NULL;
MediaEventType meType = MEUnknown;
BOOL fGetAnotherEvent = TRUE;
HRESULT hrStatus = S_OK;
// Get the event from the event queue.
// Assume that m_pEventGenerator is a valid pointer to the
// event generator's IMFMediaEventGenerator interface.
hr = m_pEventGenerator->EndGetEvent(pAsyncResult, &pEvent);
// Get the event type.
if (SUCCEEDED(hr))
{
hr = pEvent->GetType(&meType);
}
// Get the event status. If the operation that triggered the event
// did not succeed, the status is a failure code.
if (SUCCEEDED(hr))
{
hr = pEvent->GetStatus(&hrStatus);
}
if (SUCCEEDED(hr))
{
// TODO: Handle the event.
}
// If not finished, request another event.
// Pass in a pointer to this instance of the application's
// CEventHandler class, which implements the callback.
if (fGetAnotherEvent)
{
hr = m_pEventGenerator->BeginGetEvent(this, NULL);
}
SAFE_RELEASE(pEvent);
return hr;
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows Vista [app desktop | App UWP] |
Server minimo supportato | Windows Server 2008 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | mfobjects.h (include Mfidl.h) |
Libreria | Mfuuid.lib |