Поделиться через


Метод IMFMediaEventGenerator::BeginGetEvent (mfobjects.h)

Начинает асинхронный запрос для следующего события в очереди.

Синтаксис

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

Параметры

[in] pCallback

Указатель на интерфейс IMFAsyncCallback объекта обратного вызова. Клиент должен реализовать этот интерфейс.

[in] punkState

Указатель на интерфейс IUnknown объекта состояния, определенного вызывающим объектом. Этот параметр может принимать значение NULL. Этот объект можно использовать для хранения сведений о состоянии. Объект возвращается вызывающей при вызове обратного вызова.

Возвращаемое значение

Метод возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.

Код возврата Описание
S_OK
Метод выполнен успешно.
E_INVALIDARG
Аргумент указателя NULL.
MF_E_MULTIPLE_BEGIN
Существует ожидающий запрос с тем же указателем обратного вызова и другим объектом состояния.
MF_E_MULTIPLE_SUBSCRIBERS
Существует ожидающий запрос с другим указателем обратного вызова.
MF_E_SHUTDOWN
Объект был закрыт.
MF_S_MULTIPLE_BEGIN
Существует ожидающий запрос с тем же указателем обратного вызова и объектом состояния.

Комментарии

При наличии нового события генератор событий вызывает метод 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

См. также раздел

IMFMediaEventGenerator

Генераторы событий мультимедиа