2013-06-20 12 views
9

ho questo StreamReader:C# Stream.Read con timeout

  Boolean read = false; 
      while (wline!="exit") 
      { 

       while (!read || streamReader.Peek() >= 0) 
       { 
        read = true; 
        Console.Write((char)streamReader.Read()); 
       } 
       wline = Console.ReadLine(); 
       streamWriter.Write(wline+"\r\n"); 
       streamWriter.Flush(); 

      } 

Come impostare un timeout per il metodo Read()? grazie

+0

Si tratta di un TCPClient? – dsfgsho

risposta

17

Se questo è System.IO.StreamReader, quindi impostare sul BaseStream:

streamReader.BaseStream.ReadTimeout = 2000; //milliseconds, so 2 seconds 
+0

hai idea di cosa sia il valore di timeout predefinito? – SHAHS

+0

@SHAHS No. Non è ovvio per me guardare la fonte da cui proviene questo valore. La cosa migliore che posso suggerire è mettere una pausa e guardare. – DonBoitnott

5

È necessario affrontare il flusso sottostante. Quindi, nel caso in cui si utilizza un TcpClient, si può semplicemente impostare il ReceiveTimeout:

La proprietà ReceiveTimeout determina la quantità di tempo che il metodo Read bloccherà fino a quando è in grado di ricevere i dati. Questa volta è misurato in millisecondi. Se il timeout scade prima del completamento di Read , TcpClient genera un'eccezione IOException. Non esiste il timeout per impostazione predefinita.

tcpClient.ReceiveTimeout = 5000;