Condividi tramite


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
S_OK
Il metodo è riuscito.
E_INVALIDARG
Argomento puntatore NULL.
MF_E_MULTIPLE_BEGIN
È presente una richiesta in sospeso con lo stesso puntatore di callback e un oggetto di stato diverso.
MF_E_MULTIPLE_SUBSCRIBERS
È presente una richiesta in sospeso con un puntatore di callback diverso.
MF_E_SHUTDOWN
L'oggetto è stato arrestato.
MF_S_MULTIPLE_BEGIN
È 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

Vedi anche

IMFMediaEventGenerator

Generatori di eventi multimediali