Compartilhar via


Método IMFMediaEventGenerator::BeginGetEvent (mfobjects.h)

Inicia uma solicitação assíncrona para o próximo evento na fila.

Sintaxe

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

Parâmetros

[in] pCallback

Ponteiro para a interface IMFAsyncCallback de um objeto de retorno de chamada. O cliente deve implementar essa interface.

[in] punkState

Ponteiro para a interface IUnknown de um objeto de estado, definido pelo chamador. Este parâmetro pode ser NULL. Você pode usar esse objeto para armazenar informações de estado. O objeto é retornado ao chamador quando o retorno de chamada é invocado.

Retornar valor

O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.

Código de retorno Descrição
S_OK
O método foi bem-sucedido.
E_INVALIDARG
Argumento de ponteiro NULL.
MF_E_MULTIPLE_BEGIN
Há uma solicitação pendente com o mesmo ponteiro de retorno de chamada e um objeto de estado diferente.
MF_E_MULTIPLE_SUBSCRIBERS
Há uma solicitação pendente com um ponteiro de retorno de chamada diferente.
MF_E_SHUTDOWN
O objeto foi desligado.
MF_S_MULTIPLE_BEGIN
Há uma solicitação pendente com o mesmo ponteiro de retorno de chamada e objeto de estado.

Comentários

Quando um novo evento está disponível, o gerador de eventos chama o método IMFAsyncCallback::Invoke . O método Invoke deve chamar IMFMediaEventGenerator::EndGetEvent para obter um ponteiro para a interface IMFMediaEvent e usar essa interface para examinar o evento.

Não chame BeginGetEvent uma segunda vez antes de chamar EndGetEvent. Enquanto a primeira chamada ainda estiver pendente, as chamadas adicionais para o mesmo objeto falharão. Além disso, o método IMFMediaEventGenerator::GetEvent falhará se uma solicitação assíncrona ainda estiver pendente.

Exemplos

O código a seguir mostra uma implementação típica de IMFAsyncCallback::Invoke para o método BeginGetEvent . O método Invoke chama EndGetEvent para obter os dados do evento. Em seguida, ele chama BeginGetEvent novamente para solicitar outro 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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho mfobjects.h (include Mfidl.h)
Biblioteca Mfuuid.lib

Confira também

IMFMediaEventGenerator

Geradores de eventos de mídia