Il s'agit d'un problème de flux de réseau mais j'ai simplifié le cas de test à l'entrée de la console: J'ai démarré un thread qui attend 2 secondes et ferme le lecteur de flux. Mais après fermeture lecteur de flux/flux. While loop attend toujours la méthode sr.ReadLine(). Je ne veux pas faire sortir la boucle automatiquement quand ferme le lecteur de flux/flux. J'ai aussi essayé la version thread-safe de Stream Reader; TextReader.synchronized. Mais le résultat est le même.Quitter la boucle While lorsque le flux est fermé?
using System;
using System.IO;
using System.Threading;
namespace StreamReaderTest {
class Program {
static void Main(string[] args) {
new Program();
}
private StreamReader sr;
public Program() {
sr = new StreamReader(Console.OpenStandardInput());
new Thread(new ThreadStart(this.Close)).Start(); ;
string line;
while ((line = sr.ReadLine()) != null) {
Console.WriteLine(line);
}
}
public void Close() {
Thread.Sleep(2000);
sr.Close();
Console.WriteLine("Stream Closed");
}
}
}
related: http://stackoverflow.com/questions/981196/how-to-know-if-a-bufferedreader-stream-is-closed –
StreamReader ne devrait-il pas être sous votre contrôle total? Peut-être que cet exemple est un peu trompeur. – ziya
Dans le cas du flux réseau, j'attendrais * que cela fonctionne déjà; Je * soupçonne * que les subtilités de la fermeture du flux d'entrée propres aux processus actuels peuvent porter à confusion ici? –