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 (include Mfidl.h)
程式庫 Mfuuid.lib

另請參閱

IMFMediaEventGenerator

媒體事件產生器