Méthode IMFMediaEventGenerator ::BeginGetEvent (mfobjects.h)
Commence une requête asynchrone pour l’événement suivant dans la file d’attente.
Syntaxe
HRESULT BeginGetEvent(
[in] IMFAsyncCallback *pCallback,
[in] IUnknown *punkState
);
Paramètres
[in] pCallback
Pointeur vers l’interface IMFAsyncCallback d’un objet de rappel. Le client doit implémenter cette interface.
[in] punkState
Pointeur vers l’interface IUnknown d’un objet d’état, défini par l’appelant. Ce paramètre peut être NULL. Vous pouvez utiliser cet objet pour stocker des informations d’état. L’objet est retourné à l’appelant lorsque le rappel est appelé.
Valeur retournée
Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.
Code de retour | Description |
---|---|
|
S_OK |
|
Argument pointeur NULL . |
|
Il existe une requête en attente avec le même pointeur de rappel et un autre objet d’état. |
|
Une demande est en attente avec un pointeur de rappel différent. |
|
L’objet a été arrêté. |
|
Il existe une requête en attente avec le même pointeur de rappel et le même objet d’état. |
Remarques
Lorsqu’un nouvel événement est disponible, le générateur d’événements appelle la méthode IMFAsyncCallback ::Invoke . La méthode Invoke doit appeler IMFMediaEventGenerator ::EndGetEvent pour obtenir un pointeur vers l’interface IMFMediaEvent et utiliser cette interface pour examiner l’événement.
N’appelez pas BeginGetEvent une deuxième fois avant d’appeler EndGetEvent. Tant que le premier appel est toujours en attente, les appels supplémentaires au même objet échouent. En outre, la méthode IMFMediaEventGenerator ::GetEvent échoue si une requête asynchrone est toujours en attente.
Exemples
Le code suivant montre une implémentation classique d’IMFAsyncCallback ::Invoke pour la méthode BeginGetEvent . La méthode Invoke appelle EndGetEvent pour obtenir les données d’événement. Ensuite, il appelle à nouveau BeginGetEvent pour demander un autre événement.
//////////////////////////////////////////////////////////////////////
// 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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | mfobjects.h (inclure Mfidl.h) |
Bibliothèque | Mfuuid.lib |