"Метод StreamReader.ReadToEnd не смог определить конец файла в Console.In"
Похоже, вы могли взаимодействовать с .NET. Но вы вызвали StreamReader.ReadToEnd
на консольном входе. Это может быть проблематично, даже без Perl. Отрывок того, почему это так:
ReadToEnd предполагает, что поток
знает, когда он достиг конца. За
интерактивные протоколы, в которых
сервер отправляет данные только по запросу
за это и не закрывает
Соединение, ReadToEnd может заблокировать
до бесконечности и его следует избегать.
Возможно, ваш код верен, но вам нужно использовать другой метод для вашей цели.
Edit:
«В итоге я написал тривиальное консольное приложение .NET в качестве оболочки»
Мне кажется, что вы пытаетесь общаться между ними (Perl и .NET). Выбранный протокол (Console.In/Out) может работать, но вы должны использовать StreamReader.Read
или StreamReader.ReadLine
в своем приложении .NET в цикле, чтобы вы могли легко определить, когда поток закрыт. Операции чтения вернутся null
, когда они в EOF.
Кроме того, вы можете использовать любой метод, который вам нравится в Perl, и вызывать его из .NET. Т.е. вы переворачиваете логику, и .NET просто запрашивает взаимодействие с вашим Perl-кодом для ввода. Тогда вы можете придерживаться Perl для вашей основной задачи программирования. Вы можете сделать это, используя PerlSharp .