У меня проблема в моем проекте. Я хотел бы запустить процесс, 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). Спасибо всем. Чтобы ответить на вопрос, событие OuputDataRecieved отлично работает!