Implementieren einer Seek-Methode in einer verwalteten Streaming-Pipelinekomponente
Die native IStream-Schnittstelle stellt keine Methode zum Überprüfen der aktuellen Streamposition bereit, sodass die Messaging-Engine die folgende Seek-Methode verwendet.
pStream->Seek(0, STREAM_SEEK_CUR, &pNewPosition);
Diese Methode bewegt den Streamzeiger nicht. Stattdessen fragt sie die aktuelle Position ab. Wenn Sie also eine Pipelinekomponente implementieren, die mit einem nicht erkennbaren Stream funktioniert, können Sie die Stream.Seek-Methode wie im folgenden Beispiel verwenden.
Beispiel
override public long Seek(long offset, SeekOrigin origin)
{
long pos = -1;
switch(origin)
{
case SeekOrigin.Begin :
pos = offset;
break;
case SeekOrigin.Current :
pos = Position + offset;
break;
case SeekOrigin.End :
break;
}
// We generally disallow seeking of the stream
// However, in unmanaged code, many people use Seek(0,CURR) to retrieve // the current position
// Special case (that is, if Seek does not change position, do not
// throw an exception)
if (pos==Position)
{
return pos;
}
else
{
throw new NotSupportedException("ForwardOnlyEventingReadStream does not support Seek()");
}
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für