C# Problem

11/26/2013 21:48 _Roman_#1
Heya

ich habe folgendes Problem. Bei FormClosing sollen 2 Funktionen aufgerufen werden, eine macht das Programm, aber danach springt es direkt zu Close.

Code:
//Variables
        MM_Methods object_MM = new MM_Methods();
        Serializer object_Serialize = new Serializer();
        string str_path = "C:\\temp\\MM_data";
        //
Code:
private void button_close_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
        {
            object_MM.serializeMovies(lb_movies);
            object_Serialize.SerializeMovies(MM_Methods.Access, str_path);
        }
Der springt nach
Code:
 object_MM.serializeMovies(lb_movies);
direkt zu button_close_Click

Code:
FileStream fStream;
		StreamWriter sw;
		StreamReader sr;
        MM_SerializedData object_deserialize;

        //Serialize
        public void SerializeMovies(MM_SerializedData objekt, string path)
        {
            BinaryFormatter binFormatter = new BinaryFormatter();
            fStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
            sw = new StreamWriter(fStream);
			binFormatter.Serialize(fStream, objekt);
			
			sw.Close();
            fStream.Close();
        }
11/26/2013 22:58 tolio#2
step by step debuggen und schauen ab welcher zeile etwas überprungen wird
11/27/2013 15:03 dready#3
Was Tolio sagt :)
Debuggen ist wiiiichtig.
Davon ab, hat dein Zeug ein Errorhandling ?
Grundsätzlich sollte bei File/Io von Fehlern ausgegangen werden -> try catch, einfach damit es dir nicht irgendwann in Rücken fällt.
11/27/2013 15:34 _Roman_#4
Wenn ich nachher Zeit hab, gehe ich nochmal durch, wobei ich das gestern auch gemacht hab mitm Haltepunkt. Das try-catch Zeug mach ich noch rein, danke für die Erinnerung. Das Problem ist halt, dass er garnicht erst in diese Funktion reingeht. Der springt nach der ersten Funktion direkt zum button_close_click Event. Aber ich gucke nachher nochmal genauer
11/27/2013 21:29 Strean#5
theoretisch könntest du auch versuchen, das Event formClosed zu verwenden?
11/27/2013 23:33 _Roman_#6
Okay hab was festgestellt.. Bin das nochmal genau Schritt für Schritt durchgegangen und mir ist aufgefallen, dass das Programm diese 2 Stücke weglässt (die ich groß geschrieben hab also die zwei "}" am Ende:

Funktion, um die Liste zu füllen
Code:
//Data to serialize
        public void serializeMovies(ListBox movies)
        {
            foreach (string entry in movies.Items)
            {
                Access.list_movies.Add(entry);[SIZE="6"]
    }
    }[/SIZE]
        //
Nachdem es Access.list_movies.Add(entry); gemacht hat, springt es direkt zu this.close() was man oben findet. Heißt für mich also, dass es die Funktion garnicht richtig beendet. Verstehe nur nicht warum
11/28/2013 13:13 dready#7
Evtl ne Exception ?
11/28/2013 15:35 _Roman_#8
Kommt nix beim durchgehen..
11/28/2013 18:42 kissein#9
Evtl. hat die movies.Items nur 1 Eintrag ?
11/28/2013 19:05 _Roman_#10
Was meinst du damit? Ich habe zum Test nur ein Beispielvideo genommen und es damit versucht. Was ist daran so schlimm, wenn da nur ein Eintrag ist?
11/28/2013 19:08 th0rex#11
Wird foreach nur einmal durchlaufen ? Und du wunderst dich warum das nur einmal durchlaufen wird ....
11/28/2013 19:17 kissein#12
Quote:
Nachdem es Access.list_movies.Add(entry); gemacht hat, springt es direkt zu this.close() was man oben findet.Heißt für mich also, dass es die Funktion garnicht richtig beendet. Verstehe nur nicht warum
Quote:
Ich habe zum Test nur ein Beispielvideo genommen und es damit versucht. Was ist daran so schlimm, wenn da nur ein Eintrag ist?
Was wird den noch erwartet ? Nach diesen Informationen liefert der Code genau was er machen sollte.

//edit: habs mir nochmal durchgelesen, wenn ich richtig liege bezieht sich der OP auf {}. Wenn ja, hier durchlesen http://de.wikipedia.org/wiki/Variabl...en_.28Scope.29 und [Only registered and activated users can see links. Click Here To Register...]
11/30/2013 12:25 _Roman_#13
Ich verstehs nicht.. Mir ist klar, dass die Liste nur einen Eintrag haben kann, wenn ich nur 1 Video reinmache. Aber warum springt es denn direkt nach "Access.list_movies.Add(entry)" in "this.close()" und nicht zur nächsten Funktion?
11/30/2013 12:38 th0rex#14
Bei einem Element wird foreach halt nur einmal durchlaufen und wenn du danach this.close stehen hast, wird halt this.close ausgeführt. (Pack doch einfach mal 3 Elemente rein und debugge dann o.o) Was gibt es daran nicht zu verstehen ? Oder verstehe ich grade was falsch ?
11/30/2013 13:48 _Roman_#15
Hab mal ein zweites Element reingemacht und der hat die foreach Schleife auch nur einmal durchlaufen