duschgas
Goto Top

VB.NET KOmmando wird mehrfach ausgeführt (FileSystemWatcher)

Hallo,

ich stehe vor einem Problem.

Ich habe einen FileSystemWatcher.
  Dim PFAD As String = TextBox5.Text

                ' --- Instanziierung  
                Dim watcher As New FileSystemWatcher()
                watcher.Path = PFAD
                watcher.Filter = "*.ini"  
                watcher.IncludeSubdirectories = True

                watcher.NotifyFilter =
                 NotifyFilters.Attributes Or
                 NotifyFilters.LastAccess Or
                 NotifyFilters.LastWrite Or
                 NotifyFilters.Security Or
                 NotifyFilters.Size Or
                 NotifyFilters.FileName Or
                 NotifyFilters.DirectoryName

                AddHandler watcher.Changed,
                 AddressOf DS_aenderung
                AddHandler watcher.Created, AddressOf DS_neu
                AddHandler watcher.Deleted,
                 AddressOf DS_loeschen
                AddHandler watcher.Renamed, AddressOf DS_name

        watcher.EnableRaisingEvents = True

Wenn er eine neue Datei (*.ini) erkennt, dann soll eine im Hintergrund laufende Form geöffnet werden, was auch super funktioniert.
Die Form die sich öffnet, hat auch einen Button der das ganze wieder minimieren soll -> Me.Hide() & Me.ShowinTaskbar = False.

Leider öffnet sich die Form immer wieder selbständig, da ich vermute, das das irgendetwas mit dem Ablauf zu tun hat.
Besteht die Möglichkeit, ein Kommando in dem Fall "Me.Show" nur einmal auszuführen.

Bzw. das die Sub DS_neu allgemein nur einmal durchläuft?

   Public Sub DS_neu(ByVal source As Object,
    ByVal e As FileSystemEventArgs)

                Dim sb As StringBuilder = New StringBuilder(1024)

        INI.Lesen("Settings", "ShowMSG", "", sb, sb.Capacity, e.FullPath)  
        If sb.ToString = "True" Then  

            Try
                INI.Lesen("Notification", "Subject", "", sb, sb.Capacity, e.FullPath.Replace(".txt", ".ini"))  
                Me.Invoke(Sub() TextBox3.Text = sb.ToString)
                INI.Lesen("Picture", "NotPic", "", sb, sb.Capacity, e.FullPath.Replace(".txt", ".ini"))  
                If sb.ToString = "Notification" Then  
                    Me.Invoke(Sub() PictureBox1.Enabled = True)
                    Me.Invoke(Sub() PictureBox1.Image = My.Resources.blue_ico)
                ElseIf sb.ToString = "Error" Then  
                    Me.Invoke(Sub() PictureBox1.Enabled = True)
                    Me.Invoke(Sub() PictureBox1.Image = My.Resources.red_ico)
                ElseIf sb.ToString = "Warning" Then  
                    Me.Invoke(Sub() PictureBox1.Enabled = True)
                    Me.Invoke(Sub() PictureBox1.Image = My.Resources.yellow_ico)
                End If
                Threading.Thread.Sleep(25)
                Me.Invoke(Sub() TextBox2.Text = System.IO.File.ReadAllText(e.FullPath.Replace(".ini", ".txt")))  

'Hier öffnet die versteckte Form  
  Me.Invoke(Sub() Me.Show())

            Catch
            End Try
        End If


    End Sub

Vielen Dank
duschgas

Content-Key: 298769

Url: https://administrator.de/contentid/298769

Printed on: April 18, 2024 at 23:04 o'clock

Member: duschgas
duschgas Mar 10, 2016 at 16:00:17 (UTC)
Goto Top
Ich habe es doch gelöst bekommen und am Anfang mit

Me.Invoke(Sub() watcher.EnableRaisingEvents = False)

Die Events deaktiviert und am Ende wieder aktiviert.

Entschuldigt die Störung face-smile
Member: emeriks
emeriks Mar 10, 2016 at 18:47:04 (UTC)
Goto Top
Hi,
na ob das dann aber so elegant ist, wird sich zeigen. Was ist, wenn man in einem Zug mehrere INI-Dateien in den Pfad rein kopiert. Bekommt er dann alle Dateien gemeldet?

Schau mal hier: http://www.codeproject.com/Articles/58740/FileSystemWatcher-Pure-Chaos- ...
Darauf bin ich vor einiger Zeit gestoßen. Da hat sich schon mal jemand mit der Problematik beschäftigt, dass der FileSystemWatcher nur sehr schwammig meldet.

E.
Member: duschgas
duschgas Mar 10, 2016 at 20:08:31 (UTC)
Goto Top
Hallo emeriks,

vielen Dank für den Tipp.
Es kommt wirklich nur mal sporadisch eine *.ini Datei an. Vielleicht 1x im Monat. Dafür denke ich sollte die Lösung ausreichend sein.

Grüße
duschgas