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 |
---|---|
|
O método foi bem-sucedido. |
|
Argumento de ponteiro NULL. |
|
Há uma solicitação pendente com o mesmo ponteiro de retorno de chamada e um objeto de estado diferente. |
|
Há uma solicitação pendente com um ponteiro de retorno de chamada diferente. |
|
O objeto foi desligado. |
|
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 |