Перенаправить и разбирать в реальном времени STDOUT длительного проработанного процесса в VB.Net

StackOverflow https://stackoverflow.com/questions/2623028

Вопрос

Этот код выполняет «handbrakeCli» (приложение командной строки) и помещает вывод в строку:

Dim p As Process = New Process    
p.StartInfo.FileName = "handbrakecli"
p.StartInfo.Arguments = "-i [source] -o [destination]"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.Start

Dim output As String = p.StandardOutput.ReadToEnd
p.WaitForExit 

Проблема в том, что это может занять до 20 минут для завершения, в течение которого ничего не будет сообщено пользователю. Как только он будет завершен, они увидят весь вывод из приложения, который включает в себя детали прогресса. Не очень полезно.

Поэтому я пытаюсь найти образец, который показывает лучший способ:

  1. Начните внешнее приложение (скрыто)
  2. Периодически отслеживать его выход, поскольку он отображает информацию об этом прогрессе (так что я могу извлечь это и представлять хороший процентный бар для пользователя)
  3. Определите, когда внешнее приложение закончено (так что я не могу продолжить выполнение собственных приложений)
  4. Убейте внешнее приложение, если это необходимо, и обнаружить, когда это произошло (так что если пользователь попадает в «Отмена», я получаю соответствующие шаги)

У кого-нибудь есть рекомендуемые фрагменты кода?

Это было полезно?

Решение

Свойство стандартного материала имеет тип Streamreader, который имеет методы, отличные от Readteend. Это был бы больше кода, но если вы использовали метод чтения, вы могли бы сделать другие вещи, такие как предоставьте пользователю возможность отменить или сообщить о некоторых видах прогресса.

Ссылка на чтение метода с образец кода:

http://msdn.microsoft.com/en-us/library/ath1fht8(v=vs.90).aspx.

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

Класс процесса также имеет метод начала начала пустячка, который является асинхронным методом вызова с обратным вызовом.

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputReadline(v=vs.90).aspx.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top