I am trying to make an application to run multiple (adb specially) commands and get the output and display in a label.
First of all, i need to start the process to execute the commands. Thanks to stackoverflow and @pasty I found this (second reply): How to get Output of a Command Prompt Window line by line in Visual Basic?
Well, i thought that because it outputted to the console, it would be simple to just write it to the label. BIG MISTAKE! It gives me a cross threading error! A little bit of googling and stack overflow I found this: vb.net accessed from a thread other than the thread it was created on
Well, i tried to implement that, but the program just crashes freezes.
Here is the code:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    ' store error output lines
    Dim executable As String() = {"adb", "adb"}
    Dim arguments As String() = {"help", "reboot"}
    For i As Integer = 0 To 0
        Dim process = New Process()
        process.StartInfo = createStartInfo(executable(i), arguments(i))
        process.EnableRaisingEvents = True
        AddHandler process.Exited, Sub(ByVal sendera As Object, ByVal ea As System.EventArgs)
                                       Console.WriteLine(process.ExitTime)
                                       Console.WriteLine(". Processing done.")
                                       'UpdateTextBox(ea)
                                   End Sub
        ' catch standard output
        AddHandler process.OutputDataReceived, Sub(ByVal senderb As Object, ByVal eb As DataReceivedEventArgs)
                                                   If (Not String.IsNullOrEmpty(eb.Data)) Then
                                                       Console.WriteLine(String.Format("{0}> {1}", DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss"), eb.Data))
                                                       'UpdateTextBox(eb.Data)
                                                   End If
                                               End Sub
        ' catch errors
        AddHandler process.ErrorDataReceived, Sub(ByVal senderc As Object, ByVal ec As DataReceivedEventArgs)
                                                  Console.WriteLine(String.Format("! {0}", ec.Data))
                                                  Dim a As String = String.Format("! {0}", ec.Data)
                                                  'UpdateTextBox(a)
                                              End Sub
        ' start process
        Dim result = process.Start()
        ' and wait for output
        process.BeginOutputReadLine()
        ' and wait for errors :-)
        process.BeginErrorReadLine()
        process.WaitForExit()
    Next
End Sub
Private Sub UpdateTextBox(ByVal a As String)
    If Me.InvokeRequired Then
        Dim args() As String = {a}
        Me.Invoke(New Action(Of String)(AddressOf UpdateTextBox), args)
        Return
    End If
    Label1.Text += "a"
End Sub
Private Function createStartInfo(ByVal executable As String, ByVal arguments As String) As ProcessStartInfo
    Dim processStartInfo = New ProcessStartInfo(executable, arguments)
    processStartInfo.WorkingDirectory = Path.GetDirectoryName(executable)
    ' we want to read standard output
    processStartInfo.RedirectStandardOutput = True
    ' we want to read the standard error
    processStartInfo.RedirectStandardError = True
    processStartInfo.UseShellExecute = False
    processStartInfo.ErrorDialog = False
    processStartInfo.CreateNoWindow = True
    Return processStartInfo
End Function
And the source code: https://github.com/iAmAOpenSource/SyncfusionWindowsFormsApplication3