Sie können die Ausgabeströme vom Process-Objekt umleiten, um direkten Zugriff darauf zu erhalten. Sie führen einen Anruf durch und rufen ein Ereignis Ihrer Wahl auf, wenn die Ausgabe empfangen wird. Eine meiner Fragen kann eine Erklärung darüber, wie dies zu tun - C# Shell - IO redirection
:
processObject.StartInfo.RedirectStandardOutput = true;
processObject.OutputDataReceived += new DataReceivedEventHandler(processObject_OutputDataReceived);
/* ... */
processObject.Start();
processObject.BeginOutputReadLine();
Und dann später:
public void processObject_OutputDataReceived(object sender, DataReceivedEventArgs e) {
ProcessNewData(e.Data);
}
Beachten Sie, dass dies die Newline enthält.
Oder Sie können einfach es Rohr und verwenden Console.ReadLine
es in zu lesen, in der Befehlszeile, würden Sie ausführen:
cprogram | csharp_program
Leider Sie können dies nicht direkt mit dem Objekt-Prozess - nur verwenden. die obige Methode. Wenn Sie sich für diese Route entscheiden, können Sie Folgendes verwenden:
string input = "";
int currentChar = 0;
while ((currentChar = Console.Read()) > -1) {
input += Convert.ToChar(currentChar);
}
Welche liest von der Eingabe bis EOF.
Hmm Ich könnte in meiner Beschreibung etwas irreführend gewesen sein. Das ursprüngliche Programm ist in C geschrieben, wird aber über CLI in Linux ausgeführt. Einige der vorhandenen Bibliotheken existieren auch nur auf der Linux-Seite dieser Maschine, so dass ich vielleicht vergeblich versuche, dies in C# zum Laufen zu bringen (aber C# ist so schön für GUI's!) –
Oh, CLI! Ich habe es als CLR gelesen. Hoppla. :-) Sie könnten Ihr Programm in Mono arbeiten lassen - die meisten verzichten auf Änderungen. –
Ich habe versucht, eine Version von Mono für RHELv5 zu finden, aber alles, was ich sah, war "andere Lisnux", hahah, es ist besser als nichts. –