2012-07-26 6 views
5

Nachdem ein FileSystemWatcher.Error Ereignis ausgelöst wurde, habe ich keine Ahnung, was als nächstes zu tun ist. Die Ausnahme kann eine [relativ] Moll sein, wieWas ist die beste Methode, um einen FileSystemWatcher-Fehler wiederherzustellen?

zu viele Änderungen auf einmal im Verzeichnis

, die nicht der beobachtende Prozess Beobachter nicht beeinflusst, aber es kann auch ein großer sein Problem - z. B. dass das überwachte Verzeichnis gelöscht wird. In diesem Fall ist der Watcher nicht mehr funktionsfähig.

Meine Frage ist, was ist der beste Weg, um das Fehlerereignis zu behandeln?

+2

Beenden Sie die Verwendung des FileSystemWatcher, es ist unzuverlässig schreiben Sie einen Abrufdienst. – saj

+0

Ich verwende einen modifizierten FileSystemWatcher, der die meisten Zuverlässigkeitsprobleme des ursprünglichen Watcher löst [Überlaufprobleme, doppelte Ereignisse und Netzwerkpfadüberwachung] – Nissim

+0

Oder nach Dateien auf einem Ereignis suchen, das passiert, bevor es auf dem Bildschirm gemalt und angezeigt wird. Funktioniert gut für Kontextmenüs. (edit: Klingt schön Nissim, share?: P) – negligible

Antwort

1

Ich würde einfach die innere Ausnahmetyp erhalten, dann entscheiden Sie auf einer Fehlerbasis was zu tun ist (Neustart oder fehlgeschlagen).

So

myWatcher.Error += new ErrorEventHandler(OnError); 

Followde von

private static void OnError(object source, ErrorEventArgs e) 
{ 
    if (e.GetException().GetType() == typeof(InternalBufferOverflowException)) 
    { 
     // This can happen if Windows is reporting many file system events quickly 
     // and internal buffer of the FileSystemWatcher is not large enough to handle this 
     // rate of events. The InternalBufferOverflowException error informs the application 
     // that some of the file system events are being lost. 
     Console.WriteLine(("The file system watcher experienced an internal buffer overflow: " + e.GetException().Message)); 
    } 
} 
+0

Ich löste tatsächlich alle Überlaufprobleme durch Verwendung einer blockierenden Warteschlange – Nissim

2

Abhängig von den Fehlern sicher?

  1. Wenn es zu viele Daten gibt, weil der Puffer überschritten wurde (viele Änderungen), machen Sie ein Listenverzeichnis und holen Sie sich die gewünschten Änderungen.
  2. Wenn zu viele Daten vorliegen, weil Sie die FileSystemWatcher-Ereignisse nicht schnell genug verarbeiten, stellen Sie sicher, dass Sie sie effizient verarbeiten.
  3. Gelöschtes Verzeichnis, kann nichts anderes tun, als den FileSystemWatcher zu entsorgen, oder vielleicht dem Elternteil zuzusehen, wie er diesen Verzeichnisnamen erneut erstellt.
Verwandte Themen