在托管流管道组件中实现 Seek 方法
本机 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()");
}
}