我想从命令行程序(例如STDOUT
或lame
)捕获gcc
,并在运行时更新winform
的ui。我尝试的方法失败,因为流/字符串永远不会更新。需要进行哪些修正才能使这种方法可行?我是否错误地解释了.WaitForExit()
的使用?
Public Sub run(cmd As String, args As String, tgt As String)
Dim out As IO.StreamReader = IO.StreamReader.Null
Dim proc As New Diagnostics.Process()
Dim thd As New Threading.Thread(Sub()
proc.StartInfo.FileName = cmd
proc.StartInfo.Arguments = args
proc.StartInfo.UseShellExecute = False
proc.StartInfo.CreateNoWindow = True
proc.StartInfo.RedirectStandardOutput = True
proc.Start()
out = proc.StandardOutput
While Not proc.HasExited
proc.WaitForExit(1)
tgt &= out.ReadLine()
End While
''debug
MsgBox(out.ReadToEnd)
End Sub)
thd.Start()
End Sub
答案 0 :(得分:0)
需要进行哪些修正才能使这种方法可行?
等待你已经开始完成的主题:
thd.Join()
然后您可以使用tgt
变量更新您的用户界面。
或者甚至更好,在While
循环之后,在线程内执行此操作。只需确保使用Invoke
方法将所有对UI控件的调用封送到主线程,否则您将获得一个异常,告诉您不能从主线程内部操作任何UI控件。< / p>