ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
4218
4218
EMPFEHLEN
-
01.08.07 17:10 #1
- Registriert seit
- Jan 2007
- Ort
- Dexter's Laboratory
- Beiträge
- 115
Hallo,
ich hoffe, daß es das Thema noch nicht gab, zumindest fand ich da irgendwie nichts (nur einen Thread und da verstand ich als Anfänger wirklich nicht sehr viel).
Zu meinem Problem: ich habe eine kleine Anwendung in C# "geschrieben" (geklickt paßt da besser), welche ein Programm (Konsolenprogramm inkl. Parameter) öffnen soll. Das ist auch kein Problem, nur möchte ich die Ausgabe nicht in dem DOS-Fenster haben, sondern viel lieber in einer textBox.
Hier mal der kurze Code so far:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace sucher { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { textBox2.Text = "Starting: "+textBox1.Text; System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo("sucher.exe", "-qsort"); System.Diagnostics.Process.Start(startInfo); } } }
Ich muss dazu sagen, daß ich mit C# gerade erst angefangen habe, als "sprecht" langsam mit mir
Wäre super nett, wenn ihr da Lösungshinweise hättet
-
Hi
Das Property Process.StandardOutput sollte dir weiterhelfen.
Ein Beispiel dazu findest du auf der SeiteGrüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Guck mal hier:
Prozess-Output via C# anzeigen
-
01.08.07 20:43 #4
- Registriert seit
- Jan 2007
- Ort
- Dexter's Laboratory
- Beiträge
- 115
Danke schonmal ihr beiden

Hm, ich habe mal versucht, dies bei mir einzubauen, wie ich es mir gedacht habt .. leider ohne viel Erfolg
Hier mal mein Versuch:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace sucher { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ProcessStartInfo psi = new ProcessStartInfo(""sucher.exe", "-qsort"); psi.RedirectStandardOutput = true; psi.UseShellExecute = false; Process p = new Process(); p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); p.StartInfo = psi; p.Start(); p.BeginOutputReadLine(); p.WaitForExit(); } void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { textBox2 = Debug.WriteLine(e.Data); } } }
Sprich ich hatte gehofft, daß nun die Ausgabe des Konsolenprogramms in meiner Textbox( textBox2) erscheint, leider war dem nicht so, sondern ich erhielt nur einen Fehler:
Was fehlt denn da?F:\C#\sucher\Form1.cs(39,50): error CS0246: The type or namespace name 'DataReceivedEventArgs' could not be found (are you missing a using directive or an assembly reference?)
-
Es fehlt die Klasse DataReceivedEventArgs. Sollte aus der Fehlermeldung ersichtlich sein

Dennoch meine Schuld, da hier anscheinend diese Klasse im gegebenen Beispiel fehlt. Das sollte dann in etwa so aussehen:
Dann brauchst du noch einen Delegaten, der wie folgt definiert wird:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public class DataReceivedEventArgs : EventArgs { private string _data; public string Data { get { return this._data; } set { this._data = value; } } public DataReceivedEventArgs(string data) { _data = data; } }
Diesen ausserhalb der Klasse definieren.Code :1
public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e);
Ich hoff ich hab mich jetzt nicht vertippt. Hab die Sourcen gerade nicht bei der Hand.
-
01.08.07 21:06 #6
- Registriert seit
- Jan 2007
- Ort
- Dexter's Laboratory
- Beiträge
- 115
Hm, leider klappte das auch nicht (ist mir schon peinlich es zu schreiben). War ich zu blöde es einzubauen?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace sucher { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e); public class DataReceivedEventArgs : EventArgs { private string _data; public string Data { get { return this._data; } set { this._data = value; } } public DataReceivedEventArgs(string data) { _data = data; } } private void button1_Click(object sender, EventArgs e) { ProcessStartInfo psi = new ProcessStartInfo("sucher.exe", "-qsort"); psi.RedirectStandardOutput = true; psi.UseShellExecute = false; Process p = new Process(); p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); p.StartInfo = psi; p.Start(); p.BeginOutputReadLine(); p.WaitForExit(); } void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { textBox2 = Debug.WriteLine(e.Data); } } }
Diesesmal noch mehr Fehler (die ich leider nicht verstehe, weil ich nicht so recht weiß, was Dein zusätzlicher Quellcode macht
)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Csc.exe /noconfig /nowarn:1701,1702 /errorreport: prompt /warn:4 /define:TRACE /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Deployment.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug: pdbonly /optimize+ /out:obj\Release\sucher.exe /resource:obj\Release\sucher.Form1.resources /resource:obj\Release\sucher.Properties.Resources.resources /target:winexe /win32icon:icon.ico Form1.cs Form1.Designer.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs
F:\C#\sucher\Form1.cs(41,13): error CS0246: The type or namespace name 'ProcessStartInfo' could not be found (are you missing a using directive or an assembly reference?)
F:\C#\sucher\Form1.cs(41,40): error CS0246: The type or namespace name 'ProcessStartInfo' could not be found (are you missing a using directive or an assembly reference?)
F:\C#\sucher\Form1.cs(44,13): error CS0246: The type or namespace name 'Process' could not be found (are you missing a using directive or an assembly reference?)
F:\C#\sucher\Form1.cs(44,29): error CS0246: The type or namespace name 'Process' could not be found (are you missing a using directive or an assembly reference?)
F:\C#\sucher\Form1.cs(56,24): error CS0103: The name 'Debug' does not exist in the current context
-
Du musst natürlich die verwendeten Namespaces referenzieren:
Code :1
using System.Diagnostics;
-
01.08.07 22:05 #8
- Registriert seit
- Jan 2007
- Ort
- Dexter's Laboratory
- Beiträge
- 115
Ah, ich verstehe .. das macht tatsächlich auch für mich Sinn
Hm, wie bekomme ich eigentlich solche Namespaces heraus, wenn man sie wie ich noch nicht kennt?
Leider bekam ich noch zwei Fehler. Einmal hier:
und zwar diesen:Code :1
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
Und dann bei der Ausgabe in die Textbox (wohl doch nicht so simpel, wie ich es mir dachteF:\C#\sucher\Form1.cs(47,66): error CS0029: Cannot implicitly convert type 'sucher.Form1.DataReceivedEventHandler' to 'System.Diagnostics.DataReceivedEventHandler'
):
Fehler:Code :1 2 3 4
void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { textBox2 = Debug.WriteLine(e.Data); }
Hm, VOID bedeutet ja, daß es keine Rückgabe gibt, aber wieso ist das hier ein Problem - eine Ausgabe sollte doch eigentlich möglich sein?F:\C#\sucher\Form1.cs(56,24): error CS0029: Cannot implicitly convert type 'void' to 'System.Windows.Forms.TextBox'
PS: Schonmal vielen, vielen Dank für Deine Mühen und vor allem für Deine Ausdauern einem Anfänger gegenüber
-
Mensch, gestern hab ich wohl wieder eine Glanzleistung vollbracht.
Der DataReceivedEventHandler und die dazughörigen EventArgs gibt's ja im System.Diagnostics-Namespace. Die eigene Implementierung kannst also wieder rauswerfen, dann sollte es auch funktionieren. Sorry, wohl nicht mitgedacht gestern.
-
Debug.Writeline dient nicht zu solchen Zwecken!
1. Das Property DataReceivedEventArgs.Data ist schon ein String und muss nicht mehr irgendwie konvertiert werden
2. den Text musst du dem Property TextBox.Text zugewiesen werden nicht einfach der TextBox
3. zu Debug.WriteLine: In VS gibt es ein Output-Fenster, welches dir Ausgaben des Compilers und Linkers anzeigt. Hinzukommen Tracing-Ausgaben, welche über die Klassen Debug (nur im Debug-Mode) und Trace (Debug und Release)Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
02.08.07 09:58 #11
- Registriert seit
- Jan 2007
- Ort
- Dexter's Laboratory
- Beiträge
- 115
Danke Euch beiden

Das Programm läßt sich nun kompilieren. Es poppt jetzt leider immer noch ein Konsolenfenster auf (aber ohne Anzeige darin) und es wird nichts in die textBox2 umgeleitet.
Neuer Code für die Textbox:
Code :1
textBox2.Text = e.Data;
Falls ich die Berechnung des Konsolenprogrammes stoppe, stützt auch die Oberfläche ab
-
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
Ähnliche Themen
-
ausgabe von cmd.exe in variable umleiten
Von Wechselrichter im Forum C/C++Antworten: 2Letzter Beitrag: 15.05.07, 16:18 -
Pascal: Ausgabe eines durch EXEC gestarteten Programmes umleiten
Von DanielBodensee im Forum Delphi, Kylix, PascalAntworten: 0Letzter Beitrag: 16.04.05, 15:06 -
Ausgabe in String umleiten
Von Coalminer im Forum C/C++Antworten: 7Letzter Beitrag: 08.03.05, 21:55 -
Ausgabe umleiten
Von Eva im Forum C/C++Antworten: 3Letzter Beitrag: 08.03.04, 19:41 -
[MS-DOS] Ausgabe in Datei umleiten
Von JanDelay im Forum Microsoft WindowsAntworten: 4Letzter Beitrag: 16.10.03, 23:53





Zitieren


Login





