MediaFrameReader.TryAcquireLatestFrame Metode

Definisi

Mencoba untuk mendapatkan objek MediaFrameReference yang mewakili bingkai terbaru dari MediaFrameSource.

public:
 virtual MediaFrameReference ^ TryAcquireLatestFrame() = TryAcquireLatestFrame;
MediaFrameReference TryAcquireLatestFrame();
public MediaFrameReference TryAcquireLatestFrame();
function tryAcquireLatestFrame()
Public Function TryAcquireLatestFrame () As MediaFrameReference

Mengembalikan

MediaFrameReference yang mewakili bingkai terbaru dari sumber bingkai media.

Keterangan

Metode ini tidak selalu berhasil. Jika metode gagal, MediaFrameReference yang dikembalikan akan null, jadi Anda harus selalu menguji untuk melihat apakah objek yang dikembalikan null sebelum mencoba menggunakannya. Anda harus memanggil metode ini dari dalam handler untuk peristiwa MediaFrameReader.FrameArrived alih-alih melakukan polling secara manual untuk bingkai baru.

Setiap MediaFrameReader mempertahankan buffer melingkar objek MediaFrameReference yang diperoleh dari TryAcquireLatestFrame. Setelah semua objek MediaFrameReference dalam buffer telah digunakan, panggilan berikutnya ke TryAcquireLatestFrame akan menyebabkan sistem memanggil Tutup (atau Buang di C#) pada objek buffer tertua untuk menggunakannya kembali. Setelah objek dibuang, Anda tidak dapat lagi menggunakannya untuk mengakses data bingkai. Untuk alasan ini, Anda tidak boleh menyimpan objek MediaFrameReference lebih lama dari yang sebenarnya Anda butuhkan untuk memproses bingkai. Jika skenario aplikasi mengharuskan Anda menyimpan referensi ke data lebih lama, Anda harus menggunakan salah satu API yang disediakan untuk mendapatkan data yang mendasarinya. Ini termasuk:

Aplikasi bertanggung jawab untuk memanggil Tutup (atau Buang) pada objek yang dikembalikan oleh API ini ketika tidak lagi digunakan.

Penting

Jika Anda mengakses objek SoftwareBitmap atau Direct3DSurface yang disediakan oleh properti VideoMediaFrame dari MediaFrameReference, sistem membuat referensi yang kuat ke objek ini, yang berarti bahwa objek tersebut tidak akan dibuang saat Anda memanggil Buang pada MediaFrameReference yang berisi. Ini juga berlaku untuk objek SoftwareBitmap atau Direct3DSurface yang disediakan oleh objek VideoFrame yang Anda peroleh dari properti MediaFrameReference.VideoMediaFrame . Anda harus secara eksplisit memanggil metode BuangSoftwareBitmap atau Direct3DSurface secara langsung agar objek segera dibuang. Jika tidak, pengumpul sampah pada akhirnya akan membebaskan memori untuk objek-objek ini, tetapi Anda tidak dapat tahu kapan ini akan terjadi, dan jika jumlah bitmap atau permukaan yang dialokasikan melebihi jumlah maksimum yang diizinkan oleh sistem, aliran bingkai baru akan berhenti.

Berlaku untuk