1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[VB.Net] Batch in Windows Forms einbinden

Dieses Thema im Forum ".NET Windows Forms" wurde erstellt von ParadoxMSL, 2. April 2012.

  1. ParadoxMSL

    ParadoxMSL Grünschnabel

    Guten Morgen zusammen,
    ich bin auf der suche nach einer Möglichkeit, die Ausgabe einer .batch in einer Windows Forms Anwendung anzeigen zu lassen. Zudem soll die Möglichkeit bestehen über die Button´s Befehle an die .batch zu senden.

    Das ganze soll wie folgt aussehen.

    Unbenannt.png

    Dort wo der große Panel ist, soll der Inhalt der .batch Datei nachher zu sehen sein.
    Dort wo die beiden kleinen Panel derzeit sind will ich später die CPU last und den RAM verbrauch der .batch anzeigen lassen.

    Ist das möglich so wie ich mir das vorstelle?
    Falls ja, wie setze ich das am besten um.
    Welche Elemente muss ich verwenden, welchen Code muss ich wo benutzen?

    Würde mich freuen wenn mir das einer gut verdaulich präsentieren könnte ;)

    Danke schon einmal im vorraus für euer bemühen.
  2. Shakie

    Shakie Erfahrenes Mitglied

  3. ParadoxMSL

    ParadoxMSL Grünschnabel

    Hmm so ganz scheind es momentan nicht zu gehen.

    Er schreibt nur die erste zeile in die ListBox
    Dannach bleibt er einfach stehen.

    Normal sollte eine Auflistung stattfinden was die .jar datei die mit der .batch aufgerufen wird grade macht.

    So sieht es derzeit aus

    Code (Text):
    1.         Dim args() As String = Environment.GetCommandLineArgs()
    2.         ' This is the code for the base process
    3.             Dim myProcess As New Process()
    4.             ' Start a new instance of this program but specify the 'spawned' version.
    5.             Dim myProcessStartInfo As New ProcessStartInfo(args(0), "spawn")
    6.             myProcessStartInfo.FileName = "Server-1-Starten.bat"
    7.             myProcessStartInfo.UseShellExecute = False
    8.             myProcessStartInfo.RedirectStandardOutput = True
    9.             myProcess.StartInfo = myProcessStartInfo
    10.             myProcess.Start()
    11.  
    12.             Dim myStreamReader As StreamReader = myProcess.StandardOutput
    13.             ' Read the standard output of the spawned process.
    14.             Dim myString As String = myStreamReader.ReadLine()
    15.  
    16.  
    17.             LstA.Items.Add(myString)
    18.  
    19.             myProcess.WaitForExit()
    20.             myProcess.Close
    Irgentwas mach ich wohl falsch... Kann mir da einer behilflich sein?
  4. Shakie

    Shakie Erfahrenes Mitglied

    Du ließt auch nur die erste Zeile. Du musst natürlich alle Zeilen lesen... Genügt es, wenn die Ausgabe erst nach Beendigung des Batch-Jobs erscheint oder soll die Ausgabe zeitlich synchron mit dem Batch-Job ausgegeben werden?
  5. ParadoxMSL

    ParadoxMSL Grünschnabel

    Muss zeitlich synchron mit dem Batch-Job sein.
    Also der Batch ruft eine .jar auf diese .jar gibt an den Batch-Job eine ausgabe weiter die die Console anzeigt.

    Normal sieht die Console so aus:

    1.png

    Dort wird dann der Fortschritt ausgegeben. Das sollte also schon synchron sein.

    Dann noch folgendes:

    2.png

    Unswar kann man wenn die spawn area fertig geladen hat Befehle eingeben z.B. op paradox
    Das wollte ich gern auch über die Windows Forms machen können.

    Möchte also eine Consolen Abstraktion erschaffen
  6. Shakie

    Shakie Erfahrenes Mitglied

    Dann musst du in zeitlichen Abständen den OutputStream auf neuen Text überprüfen und dann ggf. ausgeben.
  7. ParadoxMSL

    ParadoxMSL Grünschnabel

    Wie mache ich das am besten?
    Hast du da ein beispiel?
  8. ParadoxMSL

    ParadoxMSL Grünschnabel

    Habe mich jetzt einige male daran versucht doch irgentwas mache ich immer Falsch. Er gibt mir soabld ich eine schleife einbaue garnichtsmehr aus und rennt sich zu tode... Kann mir vieleicht einer ein Beispiel geben?
  9. MCoder

    MCoder Premium-User

    Hallo ParadoxMSL,

    mit einer Schleife wird's recht umständlich, weil die in einem eigenen Thread laufen müsste, um den Hauptprozess nicht zu blockieren.

    Nutze doch die Möglichenkeiten der Process-Klasse, und lasse dich per Event benachrichtigen, wenn etwas in die Standardausgabe geschrieben wurde. Das Ereignis heißt OutputDataReceived und ein Beispiel findest du in der MSDN-Dokumentation zu diesem Ereignis: http://msdn.microsoft.com/de-de/library/system.diagnostics.process.outputdatareceived.aspx

    Gruß
    MCoder

Diese Seite empfehlen