读取标准输出并检查多个进程VB.NET的状态

时间:2013-10-22 09:33:03

标签: vb.net asynchronous process stdout

我运行多个命令行进程,在循环中启动它们。它可以工作并启动所有异步。

Public Sub DoWork
Dim i As Integer = 0
        While (Args_reader.Peek() > -1)
            i = i + 1
            MyArg = Args_reader.ReadLine
            Dim MyArg As String
            Dim MyProcess(i) As Process
            MyProcess(i) = New Process
            With MyProcess(i).StartInfo
                .FileName = MyFile
                .Arguments = MyArg
                .UseShellExecute = False
                .CreateNoWindow = True
                .RedirectStandardInput = True
                .RedirectStandardOutput = True
                .RedirectStandardError = True
                .WindowStyle = ProcessWindowStyle.Hidden
            End With
            MyProcess(i).Start()
        End While
        Args_reader.Close()
        i = 0
End Sub

Haw我可以读取所有这些的stdOutput并检查它们的状态吗? 我需要等到他们完成继续执行程序。

1 个答案:

答案 0 :(得分:0)

我建议你在循环中将async事件分配给every process,这样当进程有任何输出时就会被触发。标准输出或错误输出:

 Dim Proceso As New Process

 'Add the event handlers:

 AddHandler Proceso.OutputDataReceived, AddressOf CallbackProcesoAsync
 AddHandler Proceso.ErrorDataReceived, AddressOf ErrorDataReceivedAsync

 Dim startInfo As New ProcessStartInfo
 startInfo.FileName = execFile
 startInfo.RedirectStandardOutput = True
 startInfo.RedirectStandardError = True
 startInfo.CreateNoWindow = False
 Proceso.StartInfo = startInfo
 Proceso.Start()

异步事件应该是这样的:

 Private Sub CallbackProcesoAsync(sender As Object, args As System.Diagnostics.DataReceivedEventArgs)

    If Not args.Data Is Nothing AndAlso Not String.IsNullOrEmpty(args.Data) Then

       'args.Data have the output

    End If

End Sub

Private Sub ErrorDataReceivedAsync(sender As Object, args As System.Diagnostics.DataReceivedEventArgs)

   If Not args.Data Is Nothing AndAlso Not String.IsNullOrEmpty(args.Data) Then

       'args.Data have the output

   End If


End Sub
相关问题