我看过一个使用ConsoleRead API函数的C#示例,但是当我尝试将其转换为VBNET时,我得到了很多错误,也在pinvoke等其他网站中,这个唯一的例子也适用于C#,我不能找到VBNET的ConsoleRead API函数的任何好信息(如果有一种方法来读取没有APIS的控制台缓冲区,那么我不知道)。
此外,我已经尝试过这个用于VBNET的控制台缓冲读取器类(http://pastebin.com/XYxakDTV),但它会抛出一个未处理的异常,并显示“Controller not valid”这样的消息。
有人可以向我和其他所有人举例说明VBNET如何从GUI应用程序(WindowsForm)启动进程以读取控制台输出以检索字符/字符串吗?
更新:
我不确定,但我认为启动的进程(使用System.Process类)不会将控制台分配给应用程序,因此我认为MSDN中的所有示例都无法帮助我:{{3} }
答案 0 :(得分:2)
使用
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魔法,但它有效。