C# In FileSystemWatcher Handler auf Labels zugreifen

Mathias09876

Ensign
Registriert
Nov. 2010
Beiträge
235
Hallo zusammen,

ich habe hier folgendes Problem, ich überwache mit einem FileSystemWatcher eine Datei auf Änderungen und falls das eintritt soll die Datei (enthält nur eine Zeile) ausgelesen werden.
In Abhängigkeit des Ausgelesenen soll anschließend ein Label innerhalb einer GroupBox mit einer neuen Hintergrundfarbe versehen werden.

Leider stürzt mir der Code dauernd ab, ohne auf mein try - catch einzugehen oder mir eine Meldung zu hinterlassen, was das Problem ist.
Hier mal der Code:

Code:
        private void FswZvei_Changed(object sender, FileSystemEventArgs e) {
            StreamReader reader = new StreamReader(path);
            string zvei = reader.ReadLine();
            reader.Close();
            

            try {
                if (zvei != string.Empty) {
                    ((Grid)grpZvei.Content).Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate() {
                        foreach (Label lbl in ((Grid)grpZvei.Content).Children) {
                            if (("24" + lbl.Content) == zvei) {
                                lbl.Background = new SolidColorBrush(Colors.Red);
                            }
                        }
                    });
                }
            } catch (Exception ex) {
                MessageBox.Show(ex.Message);
                Logger.WriteError(ex.Message);
            }
        }

Meine Vermutung ist, dass es an den Zugriffsrechten des Threads liegt, also dass dieser nicht auf die Steuerelemente des GUI Threads zugreifen kann.
Leider hat mir der Invoke Aufruf auch nichts genutzt, er stürzt mit und ohne ab.

Geschrieben ist die Anwendung in C# und WPF.

Hoffe Ihr könnt mir weiterhelfen, da mir langsam die Ideen ausgehen ^^

Grüße
 
Und ohne die Anweisungen des try-catch-Blocks läuft alles?

Es gibt im Übrigen auch die Möglichkeit, Breakpoints zu setzen und dann mal schrittweise das Programm weiterlaufen zu lassen um zu sehen, wo es dann knallt...

Und naja, bei mir sahen die Invokes glaub meist bissl anders aus :-) was aber wohl daran liegt, dass ich noch nichts mit WPF gemacht hab

Evtl hilft das: http://blogs.msdn.com/b/nickkramer/archive/2006/03/17/553378.aspx
 
Zuletzt bearbeitet:
Hi,

Leider stürzt mir der Code dauernd ab

Mit welcher Meldung? Irgendwas muss ja passieren.

Und die Empfehlung von 1668mib ist Gold Wert in deinem Fall:

Es gibt im Übrigen auch die Möglichkeit, Breakpoints zu setzen und dann mal schrittweise das Programm weiterlaufen zu lassen um zu sehen, wo es dann knallt...

Mach das, sag uns was genau passiert, dann helfen wir gerne weiter :)

VG,
Mad
 
Der try catch Block ändert garnichts, ich hatte nur gehofft mit ihm zu erfahren warum es knallt.
Das mit den Breakpoints hatte ich auch schon versucht (hab ich vergessen zu erwähnen) ich komme ich ohne Invoke bis zur foreach, mit Invoke nurnoch bis zum Invoke.

Vom Prinzip würde das Invoke funktionieren, da ich es bei einem anderen FileSystemWatcher auch so verwendet habe. Hierbei ging es um den Zugriff auf Textboxen.

Ich fürchte, dass hier die GroupBox ärger macht allerdings wollte ich jetzt nicht eine rießen If Schleife bauen und jedes Label einzeln ausschreiben und prüfen

Edit: @Madman1209 Nein es passiert nichts, es beendet sich einfach, keine Meldung kein Error kein Garnichts ^^
 
Will der StreamReader nicht auch in ein trycatch?

Und dann wäre da noch:
AppDomain.CurrentDomain.UnhandledException
Application.ThreadException
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

Debuggen -> Ausnahmen -> Alle Haken setzen

Dann hast du das rundum sorglos Paket
 
Zuletzt bearbeitet von einem Moderator:
Ich habe nicht gefragt ob die try-catch-Anweisungen nen Unterschied machen, sondern der Code darin ...

also wenn die Methode nur so aussieht:
Code:
private void FswZvei_Changed(object sender, FileSystemEventArgs e) {
            StreamReader reader = new StreamReader(path);
            string zvei = reader.ReadLine();
            reader.Close();
}

Und statt der Schleife (im Übrigen gibts keine If-Schleife ...) könntest du auch ne entsprechende Liste bestehend aus Key-Value-Paaren nehmen... wie die http://msdn.microsoft.com/de-de/library/ms132319.aspx
 
Zuletzt bearbeitet:
Hmm das hatte ich bisher nicht versucht, habe es mal getestet und nein, es geht nicht. Er stürzt auch hier ohne jedes Piep ab...

Aber vorher bin ich doch über diese 3 Zeilen gekommen und in zvei stand auch der richtige Wert...

Jetzt bin ich mit meinem Latein vollkommen am Ende ^^

Dass es keine If-Schleife gibt weiß ich, es war nur ein unglücklich gewählter Ausdruck ^^
Das mit dem Key-Value werd ich mir mal anschaun, Danke
 
Hi,

dann bau in die Methode mit den 3 Zeilen, die jetzt nicht mehr funktioniert, einen try-catch ein oder debugge es Schritt für Schritt und sag uns, was genau das Problem ist.

VG,
Mad
 
Und keine Angst vor "Step Into"...
 
Keine Sorge, Debugge so tief wie möglich ;)

Das Problem liegt nicht an den 3 Zeilen, diese werden ohne Probleme abgearbeitet und der try Teil vollständig durchlaufen.
Am Ende der Funktion FswZvei_Changed beendet sich aber dann das ganze Program

[Edit]
Habe auch grad getestet, was ist wenn nur ein Messagebox.Show bzw. garnichts drin steht, das Programm wird sofort beendet ohne Angabe von Gründen.
Woran kann das liegen?
 
Zuletzt bearbeitet:
Ab hier denke ich wird es schwer zu helfen, ohne nen eigenständig lauffähigen Code zu haben...
 
Ja das fürchte ich auch. Leider ist das Projekt zu groß und komplex um es hier zum Test zur Verfügung zu stellen.

Werde einfach noch ein bisschen experimentieren müssen ^^

Seltsamerweise habe ich ein anderes FileSystemWatcher Objekt, das einen anderen Ordner überwachen muss, welches einwandfrei funktioniert.

Vielen Dank auf jeden Fall für die Bemühungen!
Ergänzung ()

Ich hab die Lösung gefunden, ich hatte einen eigenen Datentyp verwendet (*.ais) und das hat dem FileSystemWatcher offenbar Probleme bereitet.
Ich dachte eigentlich es geht, da er ja in den Handler gesprungen ist aber offenbar geht es doch nicht.

Das einzige, was mir momentan noch nicht klar ist, warum der Handler zweimal aufgerufen wird, ich teste die Funktion indem ich eine Textdatei öffne, bearbeite und wieder schließe (von Hand mit dem Editor).
 
Dass die Events mehrmals kommen kann am Editor liegen, wie er halt beim Abspeichern vorgeht...
 
Zurück
Oben