Mehrere Consolen in einer Forum

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Mehrere Consolen in einer Forum

    Hallo Com.,
    Ich habe ein Consolenevent in meiner Forum eingebaut und dafür folgenden Code verwendet:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    2. StartProcess()
    3. p.StandardInput.WriteLine("netstat")
    4. End Sub
    5. Sub StartProcess()
    6. p = New Process
    7. p.StartInfo.FileName = "cmd.exe" '"mcrcon.exe"
    8. 'p.StartInfo.Arguments = "-t -c -H " & host & " -P " & port & " -p " & password
    9. p.StartInfo.WorkingDirectory = ""
    10. p.StartInfo.CreateNoWindow = True
    11. p.StartInfo.UseShellExecute = False
    12. p.StartInfo.RedirectStandardOutput = True
    13. p.StartInfo.RedirectStandardInput = True
    14. AddHandler p.OutputDataReceived, AddressOf WriteProcessOutput
    15. p.Start()
    16. p.BeginOutputReadLine()
    17. End Sub
    18. Private Sub WriteProcessOutput(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    19. If e.Data IsNot Nothing Then
    20. Me.Invoke(Sub() RichTextBox1.AppendText(e.Data & Environment.NewLine))
    21. End If
    22. End Sub



    Ich möchte aber in der Forum 2 Consolenfenster haben, bzw. 2 Consolenanwendungen, ich habe versucht das Problem so zu lösen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    2. StartProcess2()
    3. p.StandardInput.WriteLine("ipconfig")
    4. End Sub
    5. Sub StartProcess2()
    6. p = New Process
    7. p.StartInfo.FileName = "cmd.exe" '"mcrcon.exe"
    8. 'p.StartInfo.Arguments = "-t -c -H " & host & " -P " & port & " -p " & password
    9. p.StartInfo.WorkingDirectory = ""
    10. p.StartInfo.CreateNoWindow = True
    11. p.StartInfo.UseShellExecute = False
    12. p.StartInfo.RedirectStandardOutput = True
    13. p.StartInfo.RedirectStandardInput = True
    14. AddHandler p.OutputDataReceived, AddressOf WriteProcessOutput2
    15. p.Start()
    16. p.BeginOutputReadLine()
    17. End Sub
    18. Private Sub WriteProcessOutput2(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    19. If e.Data IsNot Nothing Then
    20. Me.Invoke(Sub() RichTextBox2.AppendText(e.Data & Environment.NewLine))
    21. End If
    22. End Sub



    Nur wenn ich erst auf Button4 drücke und dann auf Button5 (oder andersrum) wird nur die RichTextBox genommen, die vom ersten Button angewählt wurde und nicht die andere. Wie kann ich dieses Problem lösen?

    BreadShirt schrieb:

    VB.NET-Quellcode

    1. p.StandardInput.WriteLine("netstat")

    BreadShirt schrieb:

    VB.NET-Quellcode

    1. p.StandardInput.WriteLine("ipconfig")
    Offensichtlich brauchst Du 2 Process-Instanzen in Deiner Klasse.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    BreadShirt schrieb:

    erstellen
    Wie ist in Deinem Projekt p deklariert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    BreadShirt schrieb:

    wo ich das finde
    In Deinem Code.

    VB.NET-Quellcode

    1. Dim p As Process
    2. ' oder
    3. Private p As Process
    4. ' oder
    5. Public p As Process
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also um es dir vielleicht mal verständlich zu erklären: Du hast in deinem Code eine Variable mit Events deklariert, welche als Datentyp ein Process ist. Diese Variable ist erstmal leer. In der Sub StartProcess setzt du diese Variable auf eine Instanz = Sie hat jetzt einen Inhalt und ist sozusagen "voll". In deiner Sub StartProcess2 setzt du die Variable erneut auf eine neue Instanz, was bedeutet, dass der alte Inhalt gelöscht wird bzw überschrieben wird. Dort liegt jetzt dein Problem, du versuchst zwei Schafe in einem Käfig zu halten, der nur für ein Schaf gebaut ist. Du hast nun zwei Möglichkeiten:
    -du deklarierst eine zweite Variable
    -du deklarierst eine Aufzählung sprich ein Array

    LG

    BreadShirt schrieb:

    VB.NET-Quellcode

    1. Private WithEvents p As Process

    RodFromGermany schrieb:

    Offensichtlich brauchst Du 2 Process-Instanzen in Deiner Klasse.
    Na prima.
    Machst Du

    VB.NET-Quellcode

    1. Private WithEvents p As Process
    2. Private WithEvents p2 As Process
    behandelst beide getrennt voneinander, ansonsten gleich und feddich. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!