Announcement

Collapse
No announcement yet.

Mehrere File System Watcher

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

  • Mehrere File System Watcher

    Hallo

    Ich würde gerne mit dem File System Watcher mehrere Ordner überwachen.
    Beispiel: Ordner1 und Ordner2
    Jetzt kann ich für jeden Ordner ein Objekt erzeugen.
    Mit
    Code:
    EnableRaisingEvents = True
    wird die Überwachung gestartet.

    Kann ich nun aber die Überwachung für Ordner2 beenden ohne das gleich für Ordner1 auch zu tun?

  • #2
    Mit
    Code:

    EnableRaisingEvents = True
    wird die Überwachung gestartet.
    Für jede Instanz. Wenn du also für jeden Ordner einen FileSystemWatcher hast kein Problem.

    Beachte das du beim FileSystemWatcher keine Garantie hast jede Änderung mitzubekommen.

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Für jede Instanz. Wenn du also für jeden Ordner einen FileSystemWatcher hast kein Problem.
      Ich instanziere für jeden Ordner einen FileSystemWatcher. Aber wie beende ich genau die Instanz für den Ordner2?
      Code:
      For Each Ordner In OrdnerListe
      Dim watcher As New FileSystemWatcher() watcher.Path = Ordner.Pfad
      Next
      Originally posted by Ralf Jansen View Post
      Beachte das du beim FileSystemWatcher keine Garantie hast jede Änderung mitzubekommen.
      Wie ist das gemeint? Ist nicht gerade dafür der FSW entwickelt worden?

      Comment


      • #4
        Hallo,

        benutze doch eine List Of FileSystemWatcher, in der alle eingetragen sind. Dann geht es etwa so (Achtung, nur Pseudo-Code):
        Code:
        Dim watcher As FileSystemWatcher
        Für jeden Watcher in der Liste
           if (Watcher.Pfad gleich Ordner2)
               watcher = Watcher
               Abbruch der Schleife
        Liste.Remove(watcher)
        watcher.Dispose
        Wie ist das gemeint? Ist nicht gerade dafür der FSW entwickelt worden?
        Siehe SDK-Doku/MSDN; dort steht beispielsweise:
        Wenn in kurzen Abständen Änderungen vorgenommen werden, kann es zu einem Überlauf des Puffers kommen. Dies führt dazu, dass die Komponente die Änderungen im Verzeichnis nicht mehr verfolgen kann.
        Gruß Jürgen

        @Ralf: Zwei Programmierer - gleiche Gedanken.
        Zuletzt editiert von Jürgen Thomas; 17.03.2009, 11:46.

        Comment


        • #5
          For Each Ordner In OrdnerListe

          Dim watcher As New FileSystemWatcher() watcher.Path = Ordner.Pfad

          Next
          Das wird nicht funktionieren. Du benutzt ja nur eine lokale Variable für die FileSystemWatcher. Heißt spätestens nach der Schleife sind die nicht mehr referenziert und werden vom GarbageCollector zerstört.

          Du müßt dir schon eine Referenz auf die FileSystemWatcher verwahren.
          Dann hast du auch eine Chance die Überwachung gezielt zu beenden.
          Dazu Dispose() des FileSystemWatcher aufrufen und die Referenz dann auf Nothing setzen.

          Wie ist das gemeint? Ist nicht gerade dafür der FSW entwickelt worden?
          Ja, aber das heißt noch lange nicht das eine Abarbeitung garantiert ist.
          Ließ die nochmal die Hilfe zum FileSystemWatcher durch. Insbesondere den Hinweis unter dem Punkt 'Ereignisse und Puffergrößen'.

          Comment

          Working...
          X