Announcement

Collapse
No announcement yet.

Form blockiert

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Form blockiert

    Hallo,

    ich habe ein Problem bei meinem Programm und kann beim besten Willen den Grund dafür nicht finden.

    Ich lese Daten zeilenweise aus einer Datei und schreibe sie in einem anderen Format in eine zweite Datei.
    Das ganze findet in einer Form statt. Die Form wird angezeigt, dann tut sich allerdings nichts mehr. Das heißt, die Anweisung Application.Exit(); wird nicht erreicht. Schließe ich die Anwendung, ist die Zieldatei vorhanden und auch vollständig, d.h. der Code wurde bis output.Write("Dateiende"); ausgeführt.

    Wahrscheinlich ist es nur eine Kleinigkeit, aber ich werde hier so langsam verrückt

    Danke schonmal.

    Code:
    //proceed wird vom Hauptfenster aufgerufen
    public void proceed(hauptfenster haupt)
    {
    
      //Datei zum Schreiben, Pfad übergeben vom Hauptfenster
      using (StreamWriter output = new StreamWriter(@haupt.stl_pfad))
      {
    
        //Datei wird geöffnet, Pfad übergeben vom Hauptfenster
        using (StreamReader input = new StreamReader(@haupt.txt_pfad))
        {
           string zeile;
    
           //Schleife ausführen bis zum Ende der Quelldatei
           while ((zeile = input.ReadLine()) != null)
           {
    
              //Die 3 im string zeile enthaltenen Werte werden als double x, y und z
              //gespeichert (Code erspare ich euch)
                     .....
    
              //Schreiben der drei double-Werte in Exponentialdarstellung
              output.WriteLine("   vertex {0:E} {1:E} {2:E}", x, y, z);
    
           }
    
           output.Write("Dateiende");
           input.Close();
         }
         output.Close();
       }
    
       //Anwendung soll geschlossen werden
       Application.Exit();
    }

  • #2
    Hi

    1.) Ich würde die beiden Pfade als strings an die Funktion proceed übergeben.
    2.) @ brauchts nur wenn Du einen String Literal, welche Escape Sequenzen erfordern würden, angeben möchtest: z.B. string s = @"C:\Test.txt"; ist dasselbe wie string s = "C:\\Test.txt";.
    3.) StreamWriter / StreamReader Close wird schon von using -> Dispose aufgerufen.
    4.) Ich würde die Applikation nicht von innerhalb der Funktion proceed beenden. Besser ausserhalb, dort wo die Funktion aufgerufen wird.
    5.) Es kann Gründe geben warum Application.Exit nicht klappt. Ich würde aber empfehlen Form.Close aufzurufen. Mehr Info über Application.Exit gibts hier:
    http://msdn2.microsoft.com/en-us/library/system.windows.forms.application.exit(VS.71).aspx

    Grüsse
    Simon

    Comment


    • #3
      Hallo Thorsten,

      der Flush-Befehl um den Puffer Deines StreamWriters zu leeren fehlt. Vielleicht verursacht dies das Fehlverhalten.

      Gruß Oliver

      Comment


      • #4
        Originally posted by Oliver Michalski View Post
        Hallo Thorsten,

        der Flush-Befehl um den Puffer Deines StreamWriters zu leeren fehlt. Vielleicht verursacht dies das Fehlverhalten.

        Gruß Oliver
        Flush wird mit StreamWriter.Dispose aufgerufen.

        Comment


        • #5
          Kann es sein, dass Application.Exit vor Application.Run aufgerufen wird?
          Dann gehts vermutlich nicht. Aber wie gesagt, MSDN empfiehlt Form.Close zu verwenden.

          Comment


          • #6
            Nein, Application.Exit wird danach aufgerufen.
            Wie am Ende die Anwendung geschlossen wird, ist mir im Moment nicht so wichtig. Habe das Application.Exit() nur an dieser Stelle geschrieben, um aufzuzeigen, dass das Programm nicht an dieser Stelle ankommt und irgendwo vorher hängt.

            Comment


            • #7
              Wenn es "hängt", dann wäre das GUI blockiert, d.h. es würde auch nicht mehr reagieren und Du könntest es nicht von Hand schliessen.

              -> Hast Du mit Form.Close schon probiert?

              Comment


              • #8
                Ja, geht auch nicht.
                Habe auch mal MessageBox.Show("Test"); anstelle von Application.Exit(); verwendet, aber es passiert nichts. Die Form bleibt einfach ewig stehen und die Datei wird erst geschrieben, wenn ich die Anwendung schließe.

                Comment


                • #9
                  Zeig mal den Code Teil, wo die Funktion proceed aufgerufen wird.
                  Und Versuch mal anstelle von MessageBox.Show Debug.WriteLine (System.Diagnostics) zu verwenden.

                  Comment


                  • #10
                    Thorsten,

                    was sagt denn der Debugger zu dem Problem?

                    Gruß
                    Peter
                    Zuletzt editiert von Peter Enz; 23.11.2007, 10:28.

                    Comment


                    • #11
                      wenn alles nichts hilft dann einfach noch ma neu schreiben. bei meinem letzten problem hab ich den fehler auch ums verrecken nicht gefunden, dann hab ich ihn einfach noch mal neu geschrieben und schon ahts geklappt. keine ahnung woran des gelgen war. warscheinlich ein winzig kleiner aber vertahler fehler den ich beim zweiten mal einfach richtig gemacht hab =)
                      Gruß
                      Thorben
                      Gruß Thorben

                      Comment

                      Working...
                      X