Share via


MediaFrameReader.TryAcquireLatestFrame Methode

Definition

Versucht, ein MediaFrameReference-Objekt abzurufen, das den neuesten Frame aus der MediaFrameSource darstellt.

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

Gibt zurück

Ein MediaFrameReference , der den neuesten Frame aus der Medienframequelle darstellt.

Hinweise

Diese Methode ist nicht immer erfolgreich. Wenn die Methode fehlschlägt, ist die zurückgegebene MediaFrameReference NULL. Sie sollten daher immer testen, ob das zurückgegebene Objekt NULL ist, bevor Sie versuchen, es zu verwenden. Sie sollten diese Methode innerhalb des Handlers für das MediaFrameReader.FrameArrived-Ereignis aufrufen, anstatt neue Frames manuell abzurufen.

Jeder MediaFrameReader verwaltet einen kreisförmigen Puffer von MediaFrameReference-Objekten , die von TryAcquireLatestFrame abgerufen wurden. Nachdem alle MediaFrameReference-Objekte im Puffer verwendet wurden, führen nachfolgende Aufrufe von TryAcquireLatestFrame dazu, dass das System Close (oder Dispose in C#) für das älteste Pufferobjekt aufruft, um es wiederzuverwenden. Nachdem das Objekt verworfen wurde, können Sie es nicht mehr für den Zugriff auf die Framedaten verwenden. Aus diesem Grund sollten Sie das MediaFrameReference-Objekt nicht länger speichern, als Sie den Frame tatsächlich verarbeiten müssen. Wenn Ihr App-Szenario erfordert, dass Sie einen Verweis auf die Daten länger aufbewahren, sollten Sie eine der bereitgestellten APIs verwenden, um die zugrunde liegenden Daten abzurufen. Dazu gehören:

Es liegt in der Verantwortung der App, Close (oder Dispose) für die von diesen APIs zurückgegebenen Objekte aufzurufen, wenn sie nicht mehr verwendet werden.

Wichtig

Wenn Sie auf das SoftwareBitmap- oder Direct3DSurface-Objekt zugreifen, das von der VideoMediaFrame-Eigenschaft eines MediaFrameReference bereitgestellt wird, erstellt das System einen starken Verweis auf dieses Objekt. Das bedeutet, dass sie nicht entfernt werden, wenn Sie Dispose auf dem MediaFrameReference aufrufen, der das Objekt enthält. Dies gilt auch für die SoftwareBitmap - oder Direct3DSurface-Objekte , die vom VideoFrame-Objekt bereitgestellt werden, das Sie aus der MediaFrameReference.VideoMediaFrame-Eigenschaft abrufen. Sie müssen die Dispose-Methode von SoftwareBitmap oder Direct3DSurface explizit direkt aufrufen, damit die Objekte sofort entfernt werden. Andernfalls wird der Garbage Collector den Speicher für diese Objekte schließlich freigeben. Sie wissen jedoch nicht, wann dies sein wird. Wenn die Anzahl der zugeteilten Bitmaps oder Oberflächen die maximale, vom System zugelassene Menge überschreitet, wird der Fluss neuer Frames beendet.

Gilt für: