Implémentation d’une méthode Seek dans un composant de pipeline en continu géré
L’interface IStream native ne fournit pas de méthode pour case activée la position actuelle du flux, de sorte que le moteur de messagerie utilise la méthode Seek suivante.
pStream->Seek(0, STREAM_SEEK_CUR, &pNewPosition);
Cette méthode ne déplace pas le pointeur de flux mais elle recherche la position actuelle. Par conséquent, si vous implémentez un composant de pipeline qui fonctionne avec un flux non unique, vous pouvez utiliser la méthode Stream.Seek comme dans l’exemple suivant.
Exemple
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()");
}
}