Почему StandardOutput.Read() блокируется, когда для StartInfo.RedirectStandardInput установлено значение true?C#

Место общения программистов C#
Ответить
Anonymous
 Почему StandardOutput.Read() блокируется, когда для StartInfo.RedirectStandardInput установлено значение true?

Сообщение Anonymous »

Мне трудно расшифровать документ MSDN о Process.StandardOutpout относительно того, блокируется ли метод Read(Char[], Int32, Int32) или нет. Насколько я понимаю, он не должен блокироваться, но, похоже, так и происходит, когда я устанавливаю для RedirectStandardInput значение true.

Есть ли у кого-нибудь опыт работы с этим; или какое-то объяснение возникшей у меня проблемы?

Контекст здесь таков: я не хочу ждать полной строки (т. е. с признаком конца строки), или чтобы процесс завершился до чтения стандартного вывода. Также я не хочу использовать обратные вызовы. Я хочу читать StdOut синхронно по мере записи в него процесса.

Вот упрощенная версия моего кода:

string command = @"C:\flex_sdks\flex_sdk_4.5.1.21328\bin\fcsh.exe";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = false; # 0);
if (sb_stdout.ToString().EndsWith("\n(fcsh) "))
break;
Thread.Sleep(20);
}
< /code>

update < /h2>

на основе моего (вероятно, плохого) предположения, что процесс. p>
  • с перенаправлением стандартного ввода; и,
  • читая что-то кроме завершенных строк из стандартного вывода или стандартного вывода,
я решил чтобы попробовать использовать API Windows напрямую. Я добавил ответ с таким кодом; он работает нормально (по крайней мере, на данный момент).

Еще одно обновление

Я создал запись в блоге с кодом Сейчас использую.

Подробнее здесь: https://stackoverflow.com/questions/665 ... put-is-set
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»