StandardOutput ReadToEnd, когда процесс приостанавливается по умолчанию - PullRequest
1 голос
/ 06 сентября 2011

Я, наверное, просмотрел сотни статей, связанных с остановкой StandardOutput ReadtoEnd, но ни одна из них не отвечает на мой конкретный вопрос.

Сценарий, который у меня есть, заключается в том, что я создаю оболочку для стороннего консольного приложения, которое будет использоваться в моем приложении ASP.NET MVC. Я запускаю процесс, передаю ему входную строку (которая является точечным файлом в строковом формате), и приложение возвращает файл (в данном случае pdf).

Файл помещен в стандартный вывод (в соответствии с документами), однако я не могу прочитать данные.

Когда я запускаю консольное приложение вручную, я получаю файл в виде текста в окне вывода, но программа никогда не «выходит». Я должен CTRL + C, чтобы завершить процесс.

Наверное, поэтому мои звонки на

process.StandardOutput.ReadToEnd(); 

Просто повесить?

Может кто-нибудь пролить немного света на то, что я делаю неправильно. Я хотел бы вернуть файл, полученный в выводе, как byte[] из моего вызова метода.

Спасибо и извинения, если кажется, что это дубликат.

1 Ответ

2 голосов
/ 06 сентября 2011

Есть две проблемы:

  1. ReadToEnd() возвращает строку.Это не очень хорошая идея, если двоичные данные
  2. ReadToEnd() не возвращаются, поскольку программа никогда не завершает работу

. Из-за этого попробуйте прочитать базовый поток (process.StandardOutput.BaseStream) с более низкоуровневыми потоковыми методами, такими как Stream.Read и определяйте себя, когда программа закончила отправку своих данных.

...