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 |
---|---|
|
Die Methode wurde erfolgreich ausgeführt. |
|
NULL-Zeigerargument. |
|
Es gibt eine ausstehende Anforderung mit demselben Rückrufzeiger und einem anderen Zustandsobjekt. |
|
Es gibt eine ausstehende Anforderung mit einem anderen Rückrufzeiger. |
|
Das Objekt wurde heruntergefahren. |
|
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 |