vb.net – 读取控制台流程输出

我正在尝试使用以下代码读取控制台进程的全部内容(3秒后):

Dim NewProcess As New System.Diagnostics.Process()
With NewProcess.StartInfo
    .FileName = EXE_PATH
    .RedirectStandardOutput = True
    .RedirectStandardError = True
    .RedirectStandardInput = True
    .UseShellExecute = False
    .WindowStyle = ProcessWindowStyle.Normal
    .CreateNoWindow = False 
End With

NewProcess.Start()

System.Threading.Thread.Sleep(3000)

MsgBox(NewProcess.StandardOutput.ReadToEnd)

但是,当尝试’ReadToEnd’时应用程序似乎暂停,我认为这是因为控制台进程是一个连续的输出,并且永远不会真正结束. ‘ReadLine’工作正常,但只获得第一行,但我需要在该阶段控制台的全部内容.

我怎么解决这个问题?

解决方法

我会尝试使用Process.OutputDataReceived事件来异步读取输出.

见:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx#Y242

Private Shared processOutput As StringBuilder = Nothing

Public Shared Sub StartSomeProcess()
processOutput = new StringBuilder()
Dim NewProcess As New System.Diagnostics.Process()
With NewProcess.StartInfo
    .FileName = EXE_PATH
    .RedirectStandardOutput = True
    .RedirectStandardError = True
    .RedirectStandardInput = True
    .UseShellExecute = False
    .WindowStyle = ProcessWindowStyle.Normal
    .CreateNoWindow = False 
End With

' Set our event handler to asynchronously read the sort output.
AddHandler NewProcess.OutputDataReceived,AddressOf OutputHandler
NewProcess.Start()
NewProcess.BeginOutputReadLine()
NewProcess.WaitForExit()
MsgBox(processOutput.ToString())
End Sub

Private Shared Sub OutputHandler(sendingProcess As Object,outLine As DataReceivedEventArgs)    
         ' Collect the sort command output.
         If Not String.IsNullOrEmpty(outLine.Data) Then    
            ' Add the text to the collected output.
            processOutput.AppendLine(outLine.Data)
         End If
      End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐