Ich beginne eine Konsolenanwendung, aber wenn ich die Standardausgabe umleitung bekomme ich immer nichts!process.standardoutput.ReadToEnd() immer leer?
Wenn ich es nicht umleiten kann, und stellen Sie CreateNoWindow
-false
, sehe ich alles richtig in der Konsole, aber wenn ich es umleiten, kehrt StandardOutput.ReadToEnd()
immer eine leere Zeichenfolge.
Process cproc = new Process();
cproc.StartInfo.CreateNoWindow = true;
cproc.StartInfo.FileName = Dest;
cproc.StartInfo.RedirectStandardOutput = true;
cproc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cproc.StartInfo.UseShellExecute = false;
cproc.EnableRaisingEvents = true;
cproc.Start();
cproc.Exited += new EventHandler(cproc_Exited);
while(!stop)
{
result += cproc.StandardOutput.ReadToEnd();
}
The EventHandler cproc_exited
setzt nur stop
zu true
. Kann jemand erklären, warum result
immer string.Empty
ist?
wenn ich es in während (! Stop) ändern { } s + = convproc.StandardOutput.ReadToEnd(); Ich bekomme einen Deadlock – alex
heey, es funktioniert !! sieht aus wie mein Freund (der das Konsolenprogramm gemacht hat) es vermasselt hat! es schreibt alles in den Fehlerstrom !! Ich muss mit ihm reden, vielleicht kann er das reparieren. Danke für deine schnelle Antwort! Du hast mich davor bewahrt, stundenlang vor meinem PC zu sitzen und nach einem dummen Fehler zu suchen :) – alex
@alex: Nimm die While-Schleife raus - sie sollte nicht da sein.Idealerweise sollten Sie separate Threads verwenden - einen von 'StandardOutput' und einen von' StandardError'. –