使用
StandardOutput.Read
我认为,答案是一样的你的另一个问题Run a commandline process and get the output while that process still running?
编辑你所要求的形式应用程序读取控制台输出。所以让我们有一个控制台应用程序():
Module Module1
Sub Main()
While True
' data = Console.ReadKey.KeyChar
Dim Generator As System.Random = New System.Random()
Console.Write(Generator.Next(0, 100) & " ")
Threading.Thread.Sleep(1000)
End While
End Sub
End Module
它生成一个空格分隔每秒一个数字。 现在的表格应用程序。让我们有一个形式与多TextBox
名为txtResult
和button
cmdStart
:
Private Sub cmdStart_Click(sender As Object, e As EventArgs) Handles cmdStart.Click
Dim ProcInfo As New ProcessStartInfo With
{.FileName = "DataApp.exe", .RedirectStandardOutput = True, .UseShellExecute = False}
Dim proc As Process = Process.Start(ProcInfo)
While Not proc.HasExited
Dim a As String = ChrW(proc.StandardOutput.Read)
If a = " " Then
txtResult.Text &= vbCrLf
Else
txtResult.Text &= a
End If
Threading.Thread.Sleep(100)
Application.DoEvents()
End While
End Sub
它写号到TextBox一个每一条线。没有API魔术,但它的工作原理。
如何启动进程?我会一直期待,你可以用流重定向做到这一点,而不需要* * P/Invoke的,毕竟... –
@Rowland肖您好,我启动过程,通常,该工艺具有自己的进度,并同时取得进展这个过程没有满足我无法读整行(CLI进度条行),所以我需要逐字符读取控制台输出来检索进度,我已经解决了这个问题,读取char使用流读者,但我有另一个问题未解决,过程错误输出无法读取(至少我已经尝试了很多东西,但无法读取它),所以我希望如果从控制台缓冲区读取它,我将能够读取任何过程输出(除了输入) – ElektroStudios