vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Standardausgabe in Textbox umleiten 
Autor: Knackeback
Datum: 03.04.06 09:00

Hallo,

ich habe ein Problem mit dem Umleiten der Standardausgabe eines Konsolenprogramms in eine Textbox.
Ich rufe aus einer Windows-Anwendung das Konsolenprogramm auf und will die Ausgabe des Konsolenprogramms in der Windows-Anwendung ausgeben.
Das Problem hierbei ist, das die Ausgabe erst erfolgt, wenn das Konsolenprogramm wieder beendet ist.
Das Konsolenprogramm (Trueimagecmd.exe) dient zum wiederherstellen von Festplattenimages und gibt während des Wiederherstellungsvorgangs eine Fortschrittsanzeige auf der Konsole aus. Wenn diese Ausgabe erst nach der
Wiederherstellung in der Textbox erscheint, ist sie für mich nutzlos. Ich will ja zur Laufzeit sehen, wie lang es
noch dauert

Hier ist der Codeausschnitt:
Function RunTrueImage(ByVal Arguments As String) As Integer
        Dim exitCode As Integer
        Dim p As New Process
        With p
            .StartInfo.FileName = TrueImagePath & "trueimagecmd.exe"
            .StartInfo.Arguments = Arguments
            .StartInfo.CreateNoWindow = True
            .StartInfo.UseShellExecute = False
            .StartInfo.RedirectStandardOutput = True
            .StartInfo.RedirectStandardError = True
        End With
 
        AddHandler p.OutputDataReceived, AddressOf TrueImageStdOutputHandler
        AddHandler p.ErrorDataReceived, AddressOf TrueImageErrOutputHandler
 
        p.Start()
        p.BeginErrorReadLine()
        p.BeginOutputReadLine()
        p.WaitForExit()
        exitCode = p.ExitCode
        p.Close()
        Return exitCode
End Function
 
Sub TrueImageStdOutputHandler(ByVal sendingProcess As Object, ByVal outLine As _
  DataReceivedEventArgs)
        WriteToWindow(outLine.Data)
End Sub
 
Sub TrueImageErrOutputHandler(ByVal sendingProcess As Object, ByVal outLine As _
  DataReceivedEventArgs)
        WriteToWindow(outLine.Data)
End Sub
 
Delegate Sub OneStringAsParam_Callback(ByVal txt As String)
 
Sub WriteToWindow(ByVal message As String)
        Dim callback As New OneStringAsParam_Callback(AddressOf _
          txtMain.AppendText)
        Me.Invoke(callback, New Object() {message & NewLine})
End Sub
 
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As _
  System.ComponentModel.DoWorkEventArgs) 
 
Handles BackgroundWorker1.DoWork
        RunTrueImage(e.Argument.ToString)
End Sub
 
Private Sub cmdButton1_Click(ByVal sender As Object, ByVal e As _
  System.EventArgs) Handles cmdButton1.Click
       BackgroundWorker1.RunWorkerAsync(Arguments) 
End Sub
Die Funktion RunTrueImage läuft als BackgroundWorker, die Lesevorgänge aus dem Standardausgabestream laufen asynchron ab.
Ersetze ich das Konsolenprogramm Trueimagecmd.exe durch ein selbstgeschriebenes, welches Zahlen von 1 bis 1000 auf die Konsole schreibt, funktioniert alles wunderbar. Die Ausgabe im Textfenster erfolgt während das Konsolenprogramm läuft.
Nur eben nicht mit trueimagecmd.exe.
Was könnte ich noch ausprobieren ?

Für Lösungsvorschläge wäre ich sehr dankbar

Gruß
Michael
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Standardausgabe in Textbox umleiten2.356Knackeback03.04.06 09:00
Re: Standardausgabe in Textbox umleiten1.051Knackeback07.04.06 09:17

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel