관리되는 스트리밍 파이프라인 구성 요소에서 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()");
}
}