Я пытаюсь написать программу VB .NET, которая запускает сценарий Perl, читает и использует стандартный вывод. Я хотел бы иметь возможность обрабатывать каждую строку отдельно по мере ее печати и соответствующим образом обновлять отображение моей программы. Вот некоторый код, который я «написал» (читай: «в основном скопирован из Интернета»):
Private WithEvents pscript As Process
Private Sub myProgram_Load(sender As Object, e As System.EventArgs) Handles Me.Load
pscript = New Process()
pscript.StartInfo.CreateNoWindow = True
pscript.StartInfo.FileName = "C:\perl64\bin\perl.exe"
pscript.StartInfo.Arguments = "C:\test.pl"
pscript.StartInfo.UseShellExecute = False
pscript.StartInfo.RedirectStandardOutput = True
pscript.StartInfo.RedirectStandardInput = True
AddHandler pscript.OutputDataReceived, AddressOf pscript_output_process
pscript.Start()
pscript.BeginOutputReadLine()
End Sub
Private Sub pscript_output_process(sender As Object, e As DataReceivedEventArgs)
MessageBox.Show(e.Data)
End Sub
Это работает с одной проблемой: программа ждет, пока тестовый сценарий не завершится, а затем запускает несколько событий OutputDataReceived одно за другим. Это означает, что когда я заставлю его использовать настоящий сценарий, он, скорее всего, ничего не сделает в течение нескольких часов, а затем ему придется иметь дело примерно с 5000 событий одновременно, несмотря на то, что материал печатался через довольно регулярные промежутки времени. на протяжении всего этого времени.
Есть ли способ заставить его обрабатывать каждую строку текста, когда он написан, а не все сразу в конце?