在 Managed 資料流管線元件中實作搜尋方法
原生 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()");
}
}