Почему 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

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