ограничение вывода при вызове exe-файла из кода C # - PullRequest
0 голосов
/ 25 июня 2019

У меня есть exe-файл, который я вызываю из своего кода на c #, используя пространство имен Process в c #.
Я перехватываю вывод с помощью метода ReadToEnd ().(в исходном коде exe я использовал метод печати для желаемого результата).
проблема в том, что когда мой вывод увеличивается, выполнение exe-файла прерывается и зависает.
Есть ли ограничение размера вывода, когдаВызов функции exe?

Process p = new Process();
p.StartInfo.FileName = command;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.Arguments = args;
p.Start();
p.WaitForExit();
string output = p.StandardOutput.ReadToEnd();
return output;

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

То, что вы испытываете, это тупик.Эта ситуация описана в документации .Чтобы избежать этого, обязательно прочитайте вывод перед , ожидая завершения дочернего процесса.

p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
1 голос
/ 25 июня 2019

Я помню, что у меня была та же проблема, что и здесь, и то, что я делал тогда, было примерно так:

private string RunProcess(string command, string args)
{
    StringBuilder sb = new StringBuilder();
    Process p = new Process();
    p.StartInfo.FileName = command;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.CreateNoWindow = true;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.Arguments = args;
    p.OutputDataReceived += (sender, eventArgs) => { sb.Append(eventArgs.Data); };
    p.Start();
    p.WaitForExit();
    return sb.ToString();
}
...