Vb.net Async ProcessStartInfo:运行cmd程序在文本框中实时显示,就像cmd窗口一样

Vb.net Async ProcessStartInfo:运行cmd程序在文本框中实时显示,就像cmd窗口一样,vb.net,asynchronous,processstartinfo,Vb.net,Asynchronous,Processstartinfo,我正在尝试运行一个exe程序,该程序将输出到命令框。我将输出重定向到文本框中显示,但它似乎只在程序完成时显示整个结果。我希望它在执行时一次显示一行 这是我的代码: Dim startInfo As ProcessStartInfo = New ProcessStartInfo(SomeDOScmd.exe) startInfo.Arguments = some args startInfo.CreateNoWindow = True startInfo.UseShellExecute = Fal

我正在尝试运行一个exe程序,该程序将输出到命令框。我将输出重定向到文本框中显示,但它似乎只在程序完成时显示整个结果。我希望它在执行时一次显示一行

这是我的代码:

Dim startInfo As ProcessStartInfo = New ProcessStartInfo(SomeDOScmd.exe)
startInfo.Arguments = some args
startInfo.CreateNoWindow = True
startInfo.UseShellExecute = False
startInfo.ErrorDialog = False
startInfo.RedirectStandardOutput = True
Dim pr As Process = Process.Start(startInfo)
pr.BeginOutputReadLine()    
AddHandler pr.OutputDataReceived, AddressOf ShowOutput
pr.WaitForExit()
pr.Close()
pr.Dispose()

Private Sub ShowOutput(sendingProcess As Object, _
           outLine As DataReceivedEventArgs)
   txtShow.text += outLine.Data
End Sub  

根据MSDN的说法,在我看来这应该是可行的,但事实并非如此。

与其将其定位到文本框,不如循环到行数,并将每行保存为一个字符串,然后将该字符串发送到您想要发送到的应用程序。

您无法解决此问题。重定向输出后,cmd.exe(与任何C/C++程序一样)将切换到缓冲输出。提示卡在缓冲区中,除非您强制它生成新行,否则它不会出现。如果您在“txtShow.text+=outLine.Data”行之后尝试类似的操作:“txtShow.Refresh”或“Application.DoEvents”,会发生什么?我不确定您是否理解。通过使用+=大纲数据,我基本上是在遍历所有的响应并生成一个长字符串,正如您所说的。