Compartir vía


Implementación del método Seek en un componente de canalización de streaming administrado

La interfaz IStream nativa no proporciona un método para comprobar la posición actual de la secuencia, por lo que el motor de mensajería usa el siguiente método Seek .

pStream->Seek(0, STREAM_SEEK_CUR, &pNewPosition);  

Este método no mueve el puntero de la secuencia sino que consulta sobre la posición actual. Por lo tanto, si implementa un componente de canalización que funciona con una secuencia no accesible, puede usar el método Stream.Seek como en el ejemplo siguiente.

Ejemplo

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()");  
   }  
}  

Consulte también

Desarrollo de componentes de canalización personalizados