我正在尝试编写一个运行 Perl 脚本并读取和使用标准输出的 VB .NET 程序。我希望能够在打印时单独处理每一行,并相应地更新我的程序显示。这是我“编写”的一些代码(阅读:“主要从互联网上复制”):
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 事件。这意味着当我让它使用真实的脚本时,它可能会在长达几个小时内什么都不做,然后必须同时处理 5,000 个事件,尽管事实上是以相当固定的时间间隔打印的东西在那段时间。
有什么办法可以让它在编写时处理每一行文本,而不是在最后一次处理所有文本?