Condividi tramite


Implementazione di un metodo Seek in un componente della pipeline di flusso gestita

L'interfaccia IStream nativa non fornisce un metodo per controllare la posizione corrente del flusso, quindi il motore di messaggistica usa il metodo Seek seguente.

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

Questo metodo non sposta il puntatore di flusso, bensì richiede la posizione corrente. Pertanto, se si implementa un componente della pipeline che funziona con un flusso non visualizzabile, è possibile usare il metodo Stream.Seek come nell'esempio seguente.

Esempio

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

Vedere anche

Sviluppo di componenti di pipeline personalizzati