Filesystemwatcher reagiert "zu schnell"

  • VB.NET
  • .NET (FX) 4.0

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von kayle.

    Filesystemwatcher reagiert "zu schnell"

    Hallo zusammen,

    ich nutze den Filesystemwatcher um die neuesten Bilder aus einem Ordner in einer Picturebox anzeigen zu lassen.


    VB.NET-Quellcode

    1. 'Filesystemwatcher Bilder einlesen
    2. Sub FileSystemWatcher1Created(sender As Object, e As FileSystemEventArgs)
    3. pb_letztes.ImageLocation = e.FullPath.ToString
    4. End Sub


    Das funktioniert prima solange die Filegröße der Dateien klein ist. Sobald das Bild mehrere MB an Filegröße hat, wird das Bild nicht dargestellt, weil es noch nicht fertig in dem Ordner gespeichert wurde. Der FSW reagiert ja aber auf die Erstellung ( Filter ist auf created eingestellt ) der Bilddatei. Also lädt er ein Bild in die Picturebox welches es noch garnicht gibt. Geht also nicht. Auch der Versuch erst auf "File.exists" zu warten bringt nichts da "File.exists" genauso reagiert wie der FSW.

    Welche Möglichkeiten habe ich denn noch um sicherzustellen das das Bild komplett vorhanden ist bevor ich es in die Picturebox lade ?

    Gruß Kay

    ErfinderDesRades schrieb:

    Size_Changed-Event
    Genauer: Den NotifyFilter auf Size setzen.
    Du darfst dir dann beim ersten Event die Datei erst mal nur vormerken.
    Und wenn lange genug kein Event mehr dafür geworfen wurde, die Datei verarbeiten.

    Etwa so:
    Beim Event die Datei in eine Queue einreihen zusammen mit einem Timestamp der frühesten Verarbeitung (z.b. Now + 5sec).
    Wenn ein erneutes Event für diese Datei kommt, nicht neu einreihen, sondern den Timestamp überschreiben.
    In einem getrennten Thread die Queue abarbeiten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --