Получить вывод в реальном времени из процесса

У меня проблема в моем проекте. Я хочу запустить процесс 7z.exe (консольная версия). Я пробовал три разные вещи:

  • Process.StandardOutput.ReadToEnd ();
  • OutputDataReceived и BeginOutputReadLine
  • StreamWriter

Ничего не работает. Он всегда «ждет» конца процесса, чтобы показать, что я хочу. У меня нет кода для размещения, просто если вы хотите, чтобы мой код содержал одну из вещей, перечисленных здесь. Спасибо.

Редактировать: Мой код:

        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.CreateNoWindow = true;
        process.Start();

        this.sr = process.StandardOutput;
        while (!sr.EndOfStream)
        {
            String s = sr.ReadLine();
            if (s != "")
            {
                System.Console.WriteLine(DateTime.Now + " - " + s);
            }
        }

Или

process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler(recieve);
process.StartInfo.CreateNoWindow = true;
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
public void recieve(object e, DataReceivedEventArgs outLine)
{
    System.Console.WriteLine(DateTime.Now + " - " + outLine.Data);
}

Или

process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = p.StandardOutput.ReadToEnd();
process.WaitForExit();

Где «процесс» - это мой предварительно созданный процесс

Хорошо, я знаю, почему он не работает должным образом: 7z.exe - это ошибка: он отображает процент загрузки в консоли, и он отправляет информацию только после завершения текущего файла. В добыче например отлично работает :). Я буду искать другой способ использования функций 7z без 7z.exe (возможно, с 7za.exe или с какой-нибудь DLL). Спасибо всем. Чтобы ответить на вопрос, событие OuputDataRecced работает нормально!

21
задан Extaze 11 January 2012 в 11:50
поделиться