原生 IStream 介面不提供檢查目前數據流位置的方法,因此傳訊引擎會使用下列 Seek 方法。
pStream->Seek(0, STREAM_SEEK_CUR, &pNewPosition);
此方法不會移動數據流指標;相反地,它會查詢目前的位置。 因此,如果您實作可與不可查看數據流搭配運作的管線元件,您可以使用 Stream.Seek 方法,如下列範例所示。
範例
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()");
}
}