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 개의 이벤트를 처리해야합니다. 그 시간 내내.
마지막에 한 번에 모든 내용을 쓰지 않고 각 줄을 처리 할 수있는 방법이 있습니까?
리다이렉트 stdout. – dubvfan87
아마도 여기에 없지만 도움말 문서에 "비동기 출력을 처리하는 응용 프로그램이 출력 버퍼가 플러시되었는지 확인하기 위해 WaitForExit 메서드를 호출해야합니다." –
Jim : WaitForExit 호출로 인해 스크립트가 완료 될 때까지 완전히 고정시키고, 그렇지 않으면 같은 방식으로 작동합니다. – gorcq