FileSystemWatcher, Benachrichtigung nur 1 Mal anzeigen?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    FileSystemWatcher, Benachrichtigung nur 1 Mal anzeigen?

    Hallo in die Runde,
    ich hab mir ein kleines Tool gebastelt, welches mir mit dem FSW einen Ordner überwacht. Das funktioniert soweit auch alles bestens.
    Da das Tool ohne Form daher kommt (nur System Tray Icon), bekomme ich es meist nicht mit, wenn eine Änderung statt gefunden hat.
    Nun wollte ich ein Nachricht ausgeben wenn das Event ausgelöst wird (über NotifyIcon.ShowBallonTip()).
    Allerdings wird dann ja der BallonTip bei JEDER Datei, die durch die Änderung betroffen ist angezeigt.
    Gibt es irgendeine Möglichkeit, den BallonTip erst DANN anzuzeigen, wenn das Event abgearbeitet wurde? Im OB hab ich leider nichts gefunden was dies bewerkstelligen könnte (außer vielleicht FSW.SynchronizingObject, wüsste aber nicht wie)
    Hier mal der Code des Events was ausgelöst wird:

    VB.NET-Quellcode

    1. Private Sub CheckCreated(ByVal source As Object, ByVal e As FileSystemEventArgs)
    2. If e.ChangeType <> WatcherChangeTypes.Created Then Return
    3. Using img As Image = Image.FromFile(e.FullPath)
    4. If img.Width < 1900 Then
    5. img.Dispose()
    6. Else
    7. img.Save(My.Settings.imgPath & "\" & My.Settings.imgName & "_" & imgCounter.ToString & ".jpg")
    8. imgCounter += 1
    9. End If
    10. End Using
    11. End Sub

    Danke Euch
    Grüße
    Micha
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    Allerdings wird dann ja der BallonTip bei JEDER Datei, die durch die Änderung betroffen ist angezeigt.
    Das ist korrekt.
    Woher soll denn die Software wissen, dass das Verzeichnis nun "versiegelt" ist?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @MichaHo Wodurch ist das Ende einer multiplen Operation gekennzeichnet?
    Wie wird danach ein erneuter Start festgestellt?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hmmm... ich verstehe... das Event wird ja für JEDE Änderung gefeuert, also nicht für mehrere auf einmal somit ist es nicht absehbar wann die Operation fertig ist...
    Beispiel: in dem Ordner kommen 3 Dateien neu hinzu, also wird das Event 3 Mal gefeuert und somit auch 3 Mal benachrichtigt.
    Ich dachte es läuft eher so:
    3 Dateien kommen hinzu, FSW merkt eine Änderung am Ordner, feuert 1 mal das event und arbeitet es ab...
    ich red Blödsinn :( .... da muss ich mir wohl was anderes einfallen lassen, eventuell ne Listbox wo die Änderungen eingetragen werden, die kann ich dann ja ein und ausblenden...
    "Hier könnte Ihre Werbung stehen..."
    Hi,

    ich habs jetzt so gemacht, das ich eine Variable hochzählen lasse im Create Ereignis.
    Im ContextMenü des NotifyIcon hab ich nen zusätzlichen Punkt "Änderungen", drücke ich dort drauf bekomme ich die Anzahl der Änderungen angeizeigt...
    Das passt dann so für mich :)
    "Hier könnte Ihre Werbung stehen..."
    Hi,
    doch, ich zeige den BallonTip an, wenn ich im Context Menü auf "Änderungen" Klicke

    ContextMenu:
    BallonTip:

    hier Ausschnitt vom Code:

    VB.NET-Quellcode

    1. Private _SessionImage As Integer = 0
    2. Public Sub New()
    3. With _ConTextMenu
    4. .MenuItems.Add("Einstellungen", AddressOf ShowSettings)
    5. .MenuItems.Add("-")
    6. .MenuItems.Add("Änderungen", AddressOf ShowChanges)
    7. .MenuItems.Add("-")
    8. .MenuItems.Add("Beenden", AddressOf ApplQuit)
    9. End With
    10. AddHandler _FileSW.Created, AddressOf CheckCreated
    11. With _FileSW
    12. .NotifyFilter = NotifyFilters.Attributes Or NotifyFilters.CreationTime Or NotifyFilters.DirectoryName Or NotifyFilters.FileName Or NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.Security Or NotifyFilters.Size
    13. .EnableRaisingEvents = True
    14. End With
    15. End Sub
    16. Private Sub CheckCreated(ByVal source As Object, ByVal e As FileSystemEventArgs)
    17. If e.ChangeType <> WatcherChangeTypes.Created Then Return
    18. Using img As Image = Image.FromFile(e.FullPath)
    19. If img.Width < 1900 Then
    20. img.Dispose()
    21. Else
    22. img.Save(My.Settings.imgPath & "\" & My.Settings.imgName & "_" & imgCounter.ToString & ".jpg")
    23. imgCounter += 1
    24. _SessionImage += 1
    25. End If
    26. End Using
    27. End Sub
    28. Private Sub ShowChanges(sender As Object, e As EventArgs)
    29. _NotifyIcon.BalloonTipText = _SessionImage.ToString & " Bilder wurden bisher kopiert..."
    30. _NotifyIcon.ShowBalloonTip(3)
    31. End Sub
    "Hier könnte Ihre Werbung stehen..."