Autor Beitrag
Carlo Deluxe
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 19.11.11 16:21 
Hi,
ich möchte ein Konsolenbasiertes Programm (Console Application) in eine Form einbinden. Das heißt, in einer TextBox (idealerweise ListBox, da der Output zeilenweise geschieht) wird der Output des Programms dargestellt, und zwar sobald das Programm diese Meldung ausgibt. Ausserdem will ich, dass das Konsolenprogramm auf Knopfdruck schließ- und öffnungsbar ist. Ist soewas möglich? Mit folgenden Code schaffe ich es, den Output darzustellen, sobald das Konsolenprogramm geschlossen wurde:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
Process p = new Process();
p.StartInfo.Filename=Direcory.GetCurrentDirecory()+"\\consoleapplication.exe"
p.StartInfo.RedirectStandartOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
p.WaitForExit();
textBox1.Text=p.StandardOutput.ReadToEnd();


Wenn ich es mit dem OutputDataRecieved Event versuche funktioniert es nicht, mache ich etwas falsch?

ausblenden C#-Quelltext
1:
2:
3:
4:
private void p_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
    textBox1.Text=textBox1.Text+Enviroment.NewLine+p.StandartOutput.ReadLine();
}
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 19.11.11 17:55 
Das Event wird vermutlich nicht bei jeder Zeile aufgerufen. Da du aber immer nur eine Zeile ausliest, liest du vermutlich schlicht nicht alles aus. Warum liest du da nicht auch alle verfügbaren Daten aus?
Carlo Deluxe Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Sa 19.11.11 18:41 
Wenn dem so währe, dann würde zumindest eine Zeile angezeigt werden, aber es passiert rein gar nichts...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 19.11.11 23:11 
user profile iconCarlo Deluxe hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
    textBox1.Text=textBox1.Text+Enviroment.NewLine+p.StandartOutput.ReadLine();					
An typischen Tippfehlern wie diesem merkt man ja deutlich, dass das nicht der Originalquelltext sein kann. Ist der denn wenigstens vollständig? Es fehlt nämlich erst einmal nur eine entscheidende Zeile.

Wenn du jedenfalls ein einziges Mal in das Beispiel zu OutputDataRecieved geschaut hättest (was ich eben nämlich gemacht habe...), hättest du gesehen, warum es bei dir nichts macht: :roll:
msdn.microsoft.com/d...putdatareceived.aspx
Da wird nämlich BeginOutputReadLine aufgerufen und warum steht sogar direkt im Kommentar ohne dass du nochmal den schweren Weg in die Hilfe hättest gehen müssen...

Das nächste Problem ist, dass du aus einem Thread heraus, eben aus dem OutputDataRecieved Event, auf die textBox zuzugreifen versucht. Das dürfte so nicht funktionieren.

// EDIT:
Außerdem: Wozu versuchst du aus dem Output zu lesen? Du bekommst die Daten ja übergeben, die gelesen worden sind...
msdn.microsoft.com/d...ceivedeventargs.aspx
Carlo Deluxe Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 20.11.11 13:49 
Es hat nur die BeginOutputReadLine(); Zeile gefehlt jetzt gehts, danke :)
Das mit dem e.Data ist mir dann auch aufgefallen, habe ich schon geändert.

Danke für deine Hilfe :)