Это проблема сетевого потока, но я упростил тестовый сценарий для ввода в консоль: Я начал поток, который ждет 2 секунды и закрывает считыватель потока. Но после закрытие потока/потокового считывателя. Пока цикл все еще ждет метода sr.ReadLine(). i wan't, чтобы автоматически завершить цикл выхода, когда закрывает средство чтения потока/потока.Выход из цикла while при закрытии потока?
Я попробовал также потокобезопасную версию Stream Reader; TextReader.synchronized. Но результат тот же.
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 находиться под полным контролем? Возможно, этот пример немного вводит в заблуждение. – ziya
В случае сетевого потока я бы * ожидал *, что он уже работает; Я * подозреваю * тонкости закрытия текущих процессов собственным входным потоком могут путать вещи здесь? –