IMFMediaEventGenerator::BeginGetEvent method (mfobjects.h)

Memulai permintaan asinkron untuk peristiwa berikutnya dalam antrean.

Sintaks

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

Parameter

[in] pCallback

Arahkan ke antarmuka IMFAsyncCallback dari objek panggilan balik. Klien harus mengimplementasikan antarmuka ini.

[in] punkState

Penunjuk ke antarmuka IUnknown dari objek status, yang ditentukan oleh pemanggil. Parameter ini bisa NULL. Anda dapat menggunakan objek ini untuk menyimpan informasi status. Objek dikembalikan ke pemanggil ketika panggilan balik dipanggil.

Nilai kembali

Metode mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil.
E_INVALIDARG
Argumen pointer NULL.
MF_E_MULTIPLE_BEGIN
Ada permintaan tertunda dengan penunjuk panggilan balik yang sama dan objek status yang berbeda.
MF_E_MULTIPLE_SUBSCRIBERS
Ada permintaan tertunda dengan penunjuk panggilan balik yang berbeda.
MF_E_SHUTDOWN
Objek dimatikan.
MF_S_MULTIPLE_BEGIN
Ada permintaan tertunda dengan penunjuk panggilan balik dan objek status yang sama.

Keterangan

Saat peristiwa baru tersedia, generator peristiwa memanggil metode IMFAsyncCallback::Invoke . Metode Panggil harus memanggil IMFMediaEventGenerator::EndGetEvent untuk mendapatkan penunjuk ke antarmuka IMFMediaEvent , dan menggunakan antarmuka tersebut untuk memeriksa peristiwa.

Jangan panggil BeginGetEvent untuk kedua kalinya sebelum memanggil EndGetEvent. Saat panggilan pertama masih tertunda, panggilan tambahan ke objek yang sama akan gagal. Selain itu, metode IMFMediaEventGenerator::GetEvent gagal jika permintaan asinkron masih tertunda.

Contoh

Kode berikut menunjukkan implementasi khas IMFAsyncCallback::Invoke untuk metode BeginGetEvent . Metode Panggil memanggil EndGetEvent untuk mendapatkan data peristiwa. Kemudian memanggil BeginGetEvent lagi untuk meminta peristiwa lain.

//////////////////////////////////////////////////////////////////////
//  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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header mfobjects.h (termasuk Mfidl.h)
Pustaka Mfuuid.lib

Lihat juga

IMFMediaEventGenerator

Generator Peristiwa Media