.NET线程命令行前端

时间:2014-01-25 14:01:47

标签: .net multithreading command-line frontend

我想从命令行程序(例如STDOUTlame)捕获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

1 个答案:

答案 0 :(得分:0)

  

需要进行哪些修正才能使这种方法可行?

等待你已经开始完成的主题:

thd.Join()

然后您可以使用tgt变量更新您的用户界面。

或者甚至更好,在While循环之后,在线程内执行此操作。只需确保使用Invoke方法将所有对UI控件的调用封送到主线程,否则您将获得一个异常,告诉您不能从主线程内部操作任何UI控件。< / p>