Ich versuche, einen Prozess von F# aus zu starten, zu warten, bis er fertig ist, aber auch seine Ausgabe progressiv zu lesen.
Ist dies die richtige/beste Vorgehensweise? (In meinem Fall versuche ich, Git-Befehle auszuführen, aber das hat mit der Frage nichts zu tun)
let gitexecute (logger:string->unit) cmd =
let procStartInfo = new ProcessStartInfo(@"C:\Program Files\Git\bin\git.exe", cmd)
// Redirect to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput <- true
procStartInfo.UseShellExecute <- false;
// Do not create the black window.
procStartInfo.CreateNoWindow <- true;
// Create a process, assign its ProcessStartInfo and start it
let proc = new Process();
proc.StartInfo <- procStartInfo;
proc.Start() |> ignore
// Get the output into a string
while not proc.StandardOutput.EndOfStream do
proc.StandardOutput.ReadLine() |> logger
Was ich nicht verstehe, ist, wie die proc.Start() einen Boolean zurückgeben kann und auch asynchron genug für mich, um die Ausgabe aus der while progressiv zu erhalten.
Leider verfüge ich derzeit nicht über ein ausreichend großes Repository - oder einen ausreichend langsamen Rechner -, um feststellen zu können, in welcher Reihenfolge die Dinge ablaufen...
UPDATE
Ich habe den Vorschlag von Brian ausprobiert, und es funktioniert.
Meine Frage war etwas vage. Mein Missverständnis bestand darin, dass ich davon ausging, dass Process.Start() den Erfolg des Prozesses als Ganzes und nicht nur den des "Starts" zurückgibt, und daher konnte ich nicht sehen, wie es könnte travail.