【问题标题】:Async ProcessStartInfo : Run cmd program to show in textbox just like cmd window in real timeAsync ProcessStartInfo : 运行 cmd 程序以实时显示在文本框中,就像 cmd 窗口一样
【发布时间】:2013-05-10 17:41:19
【问题描述】:

我正在尝试运行一个输出到命令框的 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”会发生什么?

标签: vb.net asynchronous processstartinfo


【解决方案1】:

而不是将其定位到文本框,而是循环到行数并将每一行保存在一个字符串中并将该字符串发送到您要发送到的应用程序。

【讨论】:

  • 不知道我明白你在说什么。通过使用 +=outline Data 我本质上是遍历所有响应并按照您所说的那样制作一个长字符串。
猜你喜欢
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
相关资源
最近更新 更多