Wie Process Output auslesen ohne Freeze

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von blackfire49.

    Wie Process Output auslesen ohne Freeze

    Guten Morgen

    Und zwar schreibe ich gerade ein kleinen Server Launcher und möchte dessen Output auslesen, es soll jedoch möglich sein weiterhin im programm zb. die Tabs zu wächseln doch leider bleibt das Programm solange er den Output liest hängen.

    In einem anderen Forum hat gestanden das man den Process in einem Backgroundworker starten soll. Doch leider lässt sich im Backgroundworker der Output nicht lesen da immer kommt das der Zugriff auf das Steuerelement von einem anderen Thread erfolgte.
    Das selbe bei einem 2ten Backgroundworker, ich habe probiert den Output in einem Timer zulesen was soweit auch ganz gut funktioniert, doch sobald kein Output mehr kommt bleibt das Programm wieder hängen.

    Deswegen wollte ich nachfragen, wie ich es anstellen kann, das er nur ließt wenn neuer Output kommt und wenn kein Output kommt er nicht ließt?
    Starten tu ich den Process so

    VB.NET-Quellcode

    1. proc.StartInfo.FileName = "java.exe"
    2. proc.StartInfo.Arguments = "-Xmx" & gb & " -jar " & jar
    3. proc.StartInfo.WorkingDirectory = tb_jarpath.Text
    4. proc.StartInfo.RedirectStandardOutput = True
    5. proc.StartInfo.UseShellExecute = False
    6. proc.StartInfo.CreateNoWindow = True
    7. proc.Start()
    8. Timer1.Start()


    und im timer lese ich es so aus. Wobei der timer nur dafür da ist damit er vorher noch auf den 2ten Tab wächselt.

    VB.NET-Quellcode

    1. Dim i As Integer = 0
    2. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    3. If i = 20 Then
    4. If proc.HasExited = False Then
    5. RichTextBox1.AppendText(proc.StandardOutput.ReadLine & vbNewLine)
    6. End If
    7. Else
    8. i += 1
    9. End If
    10. End Sub