Freigeben über


IMFMediaEventGenerator::BeginGetEvent-Methode (mfobjects.h)

Startet eine asynchrone Anforderung für das nächste Ereignis in der Warteschlange.

Syntax

HRESULT BeginGetEvent(
  [in] IMFAsyncCallback *pCallback,
  [in] IUnknown         *punkState
);

Parameter

[in] pCallback

Zeiger auf die IMFAsyncCallback-Schnittstelle eines Rückrufobjekts. Der Client muss diese Schnittstelle implementieren.

[in] punkState

Zeiger auf die IUnknown-Schnittstelle eines Zustandsobjekts, das vom Aufrufer definiert wird. Dieser Parameter kann NULL sein. Sie können dieses Objekt verwenden, um Zustandsinformationen aufzunehmen. Das -Objekt wird an den Aufrufer zurückgegeben, wenn der Rückruf aufgerufen wird.

Rückgabewert

Die Methode gibt ein HRESULT zurück. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich ausgeführt.
E_INVALIDARG
NULL-Zeigerargument.
MF_E_MULTIPLE_BEGIN
Es gibt eine ausstehende Anforderung mit demselben Rückrufzeiger und einem anderen Zustandsobjekt.
MF_E_MULTIPLE_SUBSCRIBERS
Es gibt eine ausstehende Anforderung mit einem anderen Rückrufzeiger.
MF_E_SHUTDOWN
Das Objekt wurde heruntergefahren.
MF_S_MULTIPLE_BEGIN
Es gibt eine ausstehende Anforderung mit demselben Rückrufzeiger und Zustandsobjekt.

Hinweise

Wenn ein neues Ereignis verfügbar ist, ruft der Ereignisgenerator die METHODE IMFAsyncCallback::Invoke auf. Die Invoke-Methode sollte IMFMediaEventGenerator::EndGetEvent aufrufen, um einen Zeiger auf die IMFMediaEvent-Schnittstelle abzurufen, und diese Schnittstelle verwenden, um das Ereignis zu untersuchen.

Rufen Sie BeginGetEvent nicht ein zweites Mal auf, bevor Sie EndGetEvent aufrufen. Während der erste Aufruf noch aussteht, schlagen zusätzliche Aufrufe desselben Objekts fehl. Außerdem schlägt die IMFMediaEventGenerator::GetEvent-Methode fehl, wenn eine asynchrone Anforderung noch aussteht.

Beispiele

Der folgende Code zeigt eine typische Implementierung von IMFAsyncCallback::Invoke für die BeginGetEvent-Methode . Die Invoke-Methode ruft EndGetEvent auf, um die Ereignisdaten abzurufen. Anschließend wird BeginGetEvent erneut aufgerufen, um ein anderes Ereignis anzufordern.

//////////////////////////////////////////////////////////////////////
//  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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile mfobjects.h (include Mfidl.h)
Bibliothek Mfuuid.lib

Weitere Informationen

IMFMediaEventGenerator

Medienereignisgeneratoren