Console.ReadLine
звонки TextReader.ReadLine
внутри страны. Это выходит, если основной поток закрыт. Если вы вызываете Console.In.Close()
из основного потока, это может сработать, или вы не сможете закрыть поток ввода с консоли. Попробуйте и посмотрите.
Забудьте, Console.In.Close (), кажется, не работает.
Обновление
В этом посте есть все способы сделать что-то очень похожее: Как добавить Timeout в Console.ReadLine ()?
(удаленный код, потому что он не работал)
Еще одно обновление
Я провел еще несколько исследований, и вот что я нашел:
Консоль находится в режиме линии.
Пользователь не может вводить текст в режиме строки, пока не будут вызваны Read, ReadLine или Peek.
Чтение, чтение строки и просмотр блока до тех пор, пока пользователь не нажмет Enter.
Следовательно, мы не можем позволить консоли обрабатывать линейный ввод, или мы получаем проблему блокировки.
Таким образом, мы должны использовать KeyAvailable и ReadKey и сами управлять удалением и т. Д.
В этой статье приведен пример обработки ввода ReadKey: http://msdn.microsoft.com/en-us/library/system.consolekeyinfo.keychar.aspx
Если вы измените эту функцию, чтобы она всегда вызывала KeyAvailable перед вызовом ReadKey, и ненадолго спите, если нет ввода, вы можете избежать блокировки.