Использование .NET Process для интерактивного управленияC#

Место общения программистов C#
Anonymous
Использование .NET Process для интерактивного управления

Сообщение Anonymous »

Я пытаюсь создать программу C# Forms, которая взаимодействует с консольной программой, которая создает собственную консоль и действует как оболочка. Никакого успеха у меня не было, поэтому я создал игрушку, чтобы с ней играть. Поэтому я использовал MS Visual Studio для создания следующей консольной программы:

Код: Выделить всё

#include 

int main()
{
int s;
printf("Hello, World!\n");

printf("Enter a number:  ");

scanf_s("%d", &s);

printf("The Square of %d is %d\n", s, s * s);
}
В WinForms я создаю процесс и запускаю его следующим образом:

Код: Выделить всё

Process Cmd = new Process();

Cmd.StartInfo.FileName = "Square.exe";
//Cmd.StartInfo.FileName = "NoInput.exe";
Cmd.StartInfo.RedirectStandardInput = true;
Cmd.StartInfo.RedirectStandardOutput = true;

Cmd.StartInfo.CreateNoWindow = true;
Cmd.StartInfo.UseShellExecute = false;
Cmd.Start();

line = Cmd.StandardOutput.ReadLine();
rtbStatus.AppendText(line);

Cmd.StandardInput.WriteLine("30");
Cmd.StandardInput.Flush();

line = Cmd.StandardOutput.ReadToEnd();
rtbStatus.AppendText(line);

Cmd.WaitForExit();
Который никогда не проходит мимо ReadLine(). Даже Peek() зависает и даже не возвращает -1.
Однако, если я добавлю fflush(stdout) после printf() в Square.c, все будет работать нормально, так что, похоже, это проблема с буферизацией. Я не могу войти в программу, которую пытаюсь запустить, и добавить fflushes(), могу ли я еще что-нибудь сделать, чтобы дать толчок StdOut? была программой, которая просто выдавала на экран кучу текста без какого-либо взаимодействия. Это сработало нормально.
eta: Если я записываю входные данные в процесс до того, как запрашиваю выходные данные, это работает!

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