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