Warum wird FileSystemWatcher zweimal ausgelöst?

8

Warum wird der FileSystemWatcher zweimal ausgelöst? Gibt es eine einfache Möglichkeit, es zu beheben? Sicher, wenn ich die Textdatei aktualisiere oder bearbeite, sollte sie nur einmal ausgelöst werden?

diesen Link hier Ссылка sagt

  
  1. Ereignisse werden zweimal ausgelöst - Ein Ereignis wird zweimal ausgelöst, wenn ein Event-Handler (AddHander FSW.Created, AddressOf FSW_Created) ist   explizit angegeben. Dies liegt normalerweise an den öffentlichen Ereignissen   automatisch die entsprechenden geschützten Methoden aufrufen (OnChanged,   OnCreated, OnDeleted, OnRenamed). Um dieses Problem einfach zu beheben   Entfernen Sie den expliziten Ereignishandler (AddHandler ...).
  2.   

Was bedeutet "den expliziten Ereignishandler entfernen"?

%Vor%     
Hello-World 17.10.2012, 18:04
quelle

2 Antworten

8

Aktualisierung:

Ich habe zwei Lösungen gefunden. Einer verwendet Threads und der andere nicht. Treffen Sie Ihre Wahl: -).

Ohne Threading:

%Vor%

Diese Lösung (ohne Threading) setzt den Watcher.EnableRaisingEvents auf False. Es ist nach diesem Punkt, wo Sie normalerweise verarbeiten würden, welche Dateien betroffen sind (oder geändert werden). Anschließend werden die EnableRaisingEvents nach Abschluss der Arbeit auf True zurückgesetzt.

Mit threading:

%Vor%

Diese Lösung, obwohl ein bisschen hacky , funktioniert. Es deaktiviert die Überprüfung auf neue Änderungen / Ereignisse für 250ms und aktiviert dann die Überprüfung erneut, basierend auf der Annahme, dass Sie nicht alle 250ms auf eine Änderung prüfen müssen. Ich habe fast alles versucht, was mir einfällt, um eine echte Lösung für Sie zu finden, aber das wird in der Zwischenzeit funktionieren.

    
Arrow 17.10.2012, 18:20
quelle
1

Überprüfen Sie e.ChangeType. Ich kann mir vorstellen, dass Sie zwei verschiedene Benachrichtigungen erhalten. Vielleicht LastAccess und LastModified. In diesem Fall ist das das erwartete Verhalten.

    
Frobzig 17.10.2012 18:19
quelle