Frage

Dieser Code ausführt "handbrakecli" (eine Kommandozeilen-Anwendung) und legt die Ausgabe in einen String:

Dim p As Process = New Process    
p.StartInfo.FileName = "handbrakecli"
p.StartInfo.Arguments = "-i [source] -o [destination]"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.Start

Dim output As String = p.StandardOutput.ReadToEnd
p.WaitForExit 

Das Problem ist, dass diese bis zu 20 Minuten dauern kann, bis zu, während der Vervollständigung nichts zurück an den Benutzer gemeldet werden. Sobald es fertig ist, werden sie alle die Ausgabe von der Anwendung sehen, welche Fortschritte Details enthält. Nicht sehr nützlich.

Deshalb versuche ich, ein Beispiel, das zeigt, auf die beste Art und Weise zu finden:

  1. Starten Sie eine externe Anwendung (versteckt)
  2. Monitor seinen Ausgang in regelmäßigen Abständen, wie es Informationen über sie den Fortschritt anzeigt (so dass ich diese extrahieren und einen schönen Prozentsatz bar für den Anwender)
  3. Bestimmen Sie, wenn die externe Anwendung beendet ist (so dass ich nicht mit meiner eigenen Anwendungen Ausführung fortsetzen kann)
  4. Tötet die externe Anwendung, wenn nötig und erkennt, wenn dies geschehen ist (so, dass, wenn der Benutzer Hits „Abbrechen“, ich die geeigneten Maßnahmen erhalten)

Hat jemand irgendwelche empfohlenen Code-Schnipsel haben?

War es hilfreich?

Lösung

Die StandardOutput Eigenschaft ist vom Typ Stream, die anderen Methoden als ReadToEnd hat. Es wäre mehr Code, aber wenn Sie die Read-Methode verwendet, können Sie andere Dinge tun, wie der Benutzer die Möglichkeit geben, zu stornieren oder irgendeine Art von Fortschritt zu berichten.

Link zur Lesemethode mit Codebeispiel:

http://msdn.microsoft. com / en-us / library / ath1fht8 (v = VS.90) aspx

Edit:

die Prozessklasse hat auch eine Methode, die mit BeginOutputReadLine Rückruf ein asynchroner Methodenaufruf ist.

http: //msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline(v=VS.90).aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top