vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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
Re: readLine aus konsole aber wie? 
Autor: ModeratorDaveS (Moderator)
Datum: 17.10.04 10:28

Also, das ist alles ein wenig problematisch. Wenn du mit stdOut.ReadToEnd() versuchst sperrt das, bis stdOut geschlossen wird. Um cmd zu beenden musst du Exit absetzen, aber wenn dein Code nicht weiterläuft ist das schwierig. Mit .ReadLine() ist es ähnlich, das sperrt z.B. beim Commandpromt, weil keine volle Zeile geschrieben wird. Und .Peek() und .Read() klappen auch nicht, da .Peek() irgendwann einfach -1 liefert, obwohl vermutlich Daten noch geschrieben werden.

Wenn du nur ein Ping absetzen willst kannst du das einfach als Parameter zu process.Start übergeben. Wenn du mehrere Befehle brauchst kannst du alles schreiben (einschliesslich Exit) und dann .ReadToEnd() benutzen. Wenn das viele Daten sind löhnt es sich .ReadToEnd() in einem zweiten Thread laufen zu lassen, dann wird die Hauptroutine nicht gesperrt. Wie hier:
    Private Delegate Sub GetDataHandler(ByVal dataIn As System.IO.StreamReader, _
                                        ByVal dataOut As System.IO.StreamWriter)
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        Debug.WriteLine(Environment.GetEnvironmentVariable("COMSPEC"))
 
        Dim swo As New System.IO.StreamWriter("C:\xdos.txt")
        Dim prog As Process = New Process
        prog.StartInfo.FileName = Environment.GetEnvironmentVariable("COMSPEC")
 
        prog.StartInfo.UseShellExecute = False
        prog.StartInfo.RedirectStandardOutput = True
        prog.StartInfo.RedirectStandardInput = True
        prog.StartInfo.CreateNoWindow = True
        prog.Start()
 
        Dim si As System.IO.StreamWriter = prog.StandardInput
        Dim so As System.IO.StreamReader = prog.StandardOutput
        Dim gd As New GetDataHandler(AddressOf GetData)
        Dim ia As IAsyncResult = gd.BeginInvoke(so, swo, Nothing, Nothing)
 
        Dim s As String
        For i As Integer = 1 To 10
            si.WriteLine("Ping 172.17.4." & i.ToString())
        Next
        prog.StandardInput.WriteLine("Exit")
        gd.EndInvoke(ia)
        prog.WaitForExit()
        swo.Close()
    End Sub
 
    Private Sub GetData(ByVal dataIn As System.IO.StreamReader, _
                        ByVal dataOut As System.IO.StreamWriter)
        dataOut.Write(dataIn.ReadToEnd())
    End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
readLine aus konsole aber wie?2.022Merkurius17.10.04 02:07
Re: readLine aus konsole aber wie?1.822ModeratorDaveS17.10.04 10:28
Re: readLine aus konsole aber wie?1.431Merkurius17.10.04 18:59

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