Опитвам се да напиша 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 събития наведнъж, въпреки факта, че нещата се отпечатват на доста редовни интервали през това време.
Има ли някакъв начин да го накарам да се справя с всеки ред текст, когато е написан, вместо с целия наведнъж в края?