Метод IMFMediaEventGenerator::BeginGetEvent (mfobjects.h)
Начинает асинхронный запрос для следующего события в очереди.
Синтаксис
HRESULT BeginGetEvent(
[in] IMFAsyncCallback *pCallback,
[in] IUnknown *punkState
);
Параметры
[in] pCallback
Указатель на интерфейс IMFAsyncCallback объекта обратного вызова. Клиент должен реализовать этот интерфейс.
[in] punkState
Указатель на интерфейс IUnknown объекта состояния, определенного вызывающим объектом. Этот параметр может принимать значение NULL. Этот объект можно использовать для хранения сведений о состоянии. Объект возвращается вызывающей при вызове обратного вызова.
Возвращаемое значение
Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.
Код возврата | Описание |
---|---|
|
Метод выполнен успешно. |
|
Аргумент указателя NULL. |
|
Существует ожидающий запрос с тем же указателем обратного вызова и другим объектом состояния. |
|
Существует ожидающий запрос с другим указателем обратного вызова. |
|
Объект был закрыт. |
|
Существует ожидающий запрос с тем же указателем обратного вызова и объектом состояния. |
Комментарии
При наличии нового события генератор событий вызывает метод IMFAsyncCallback::Invoke . Метод Invoke должен вызывать IMFMediaEventGenerator::EndGetEvent , чтобы получить указатель на интерфейс IMFMediaEvent , и использовать этот интерфейс для проверки события.
Не вызывайте BeginGetEvent во второй раз перед вызовом EndGetEvent. Пока первый вызов все еще находится в ожидании, дополнительные вызовы к тому же объекту завершатся ошибкой. Кроме того, метод IMFMediaEventGenerator::GetEvent завершается сбоем, если асинхронный запрос все еще находится в состоянии ожидания.
Примеры
В следующем коде показана типичная реализация IMFAsyncCallback::Invoke для метода BeginGetEvent . Метод Invoke вызывает Метод EndGetEvent для получения данных события. Затем он снова вызывает BeginGetEvent , чтобы запросить другое событие.
//////////////////////////////////////////////////////////////////////
// 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;
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | mfobjects.h (включая Mfidl.h) |
Библиотека | Mfuuid.lib |