Partager via


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
S_OK
E_INVALIDARG
Argument pointeur NULL .
MF_E_MULTIPLE_BEGIN
Il existe une requête en attente avec le même pointeur de rappel et un autre objet d’état.
MF_E_MULTIPLE_SUBSCRIBERS
Une demande est en attente avec un pointeur de rappel différent.
MF_E_SHUTDOWN
L’objet a été arrêté.
MF_S_MULTIPLE_BEGIN
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

Voir aussi

IMFMediaEventGenerator

Générateurs d’événements multimédias