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 接口的指针,并使用该接口检查事件。

在调用 EndGetEvent 之前,请勿再次调用 BeginGetEvent。 当第一次调用仍处于挂起状态时,对同一对象的其他调用将失败。 此外,如果异步请求仍处于挂起 状态,IMFMediaEventGenerator::GetEvent 方法将失败。

示例

以下代码演示了 BeginGetEvent 方法的 IMFAsyncCallback::Invoke 的典型实现。 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
标头 mfobjects.h (包括 Mfidl.h)
Library Mfuuid.lib

另请参阅

IMFMediaEventGenerator

媒体事件生成器