tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
4218
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Dragosani Dragosani ist offline Mitglied Gold
    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
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Das Property Process.StandardOutput sollte dir weiterhelfen.
    Ein Beispiel dazu findest du auf der Seite
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
     

  4. #4
    Dragosani Dragosani ist offline Mitglied Gold
    Registriert seit
    Jan 2007
    Ort
    Dexter's Laboratory
    Beiträge
    115
    Danke schonmal ihr beiden
    Zitat Zitat von Norbert Eder Beitrag anzeigen
    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:

    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?)
    Was fehlt denn da?
     

  5. #5
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    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:
    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;
      }
    }
    Dann brauchst du noch einen Delegaten, der wie folgt definiert wird:
    Code :
    1
    
    public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e);
    Diesen ausserhalb der Klasse definieren.

    Ich hoff ich hab mich jetzt nicht vertippt. Hab die Sourcen gerade nicht bei der Hand.
     

  6. #6
    Dragosani Dragosani ist offline Mitglied Gold
    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
     

  7. #7
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Du musst natürlich die verwendeten Namespaces referenzieren:
    Code :
    1
    
    using System.Diagnostics;
     

  8. #8
    Dragosani Dragosani ist offline Mitglied Gold
    Registriert seit
    Jan 2007
    Ort
    Dexter's Laboratory
    Beiträge
    115
    Zitat Zitat von Norbert Eder Beitrag anzeigen
    Du musst natürlich die verwendeten Namespaces referenzieren:
    Code :
    1
    
    using System.Diagnostics;
    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:
    Code :
    1
    
    p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
    und zwar diesen:
    F:\C#\sucher\Form1.cs(47,66): error CS0029: Cannot implicitly convert type 'sucher.Form1.DataReceivedEventHandler' to 'System.Diagnostics.DataReceivedEventHandler'
    Und dann bei der Ausgabe in die Textbox (wohl doch nicht so simpel, wie ich es mir dachte ):
    Code :
    1
    2
    3
    4
    
            void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
            {
                textBox2 = Debug.WriteLine(e.Data);
            }
    Fehler:
    F:\C#\sucher\Form1.cs(56,24): error CS0029: Cannot implicitly convert type 'void' to 'System.Windows.Forms.TextBox'
    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?

    PS: Schonmal vielen, vielen Dank für Deine Mühen und vor allem für Deine Ausdauern einem Anfänger gegenüber
     

  9. #9
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    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.
     

  10. #10
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von Dragosani Beitrag anzeigen
    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?
    Zitat Zitat von Dragosani Beitrag anzeigen
    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?
    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 Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  11. #11
    Dragosani Dragosani ist offline Mitglied Gold
    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
     

  12. #12
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Zitat Zitat von Dragosani Beitrag anzeigen
    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
    Schau dir mal die Properties Process.EnableRaisingEvents und ProcessStartInfo.CreateNoWindow an.
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

Ähnliche Themen

  1. ausgabe von cmd.exe in variable umleiten
    Von Wechselrichter im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 15.05.07, 16:18
  2. Pascal: Ausgabe eines durch EXEC gestarteten Programmes umleiten
    Von DanielBodensee im Forum Delphi, Kylix, Pascal
    Antworten: 0
    Letzter Beitrag: 16.04.05, 15:06
  3. Ausgabe in String umleiten
    Von Coalminer im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 08.03.05, 21:55
  4. Ausgabe umleiten
    Von Eva im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 08.03.04, 19:41
  5. [MS-DOS] Ausgabe in Datei umleiten
    Von JanDelay im Forum Microsoft Windows
    Antworten: 4
    Letzter Beitrag: 16.10.03, 23:53