2012-07-26 12 views
5

Dopo che un evento FileSystemWatcher.Error è stato sollevato, non ho idea di cosa fare dopo. L'eccezione può essere un [relativamente] uno minore, comeQual è la procedura migliore per ripristinare da un errore FileSystemWatcher?

troppi cambiamenti in una volta nella directory

che non influisce processo di osservazione degli Osservatori, ma può anche essere un grande problema - come la directory controllata che viene cancellata, nel qual caso l'osservatore non è più funzionante.

La mia domanda è qual è il modo migliore per gestire l'evento di errore?

+2

Interrompere l'utilizzo di FileSystemWatcher, è inaffidabile scrivere un servizio di polling. – saj

+0

Sto utilizzando un FileSystemWatcher modificato che risolve la maggior parte dei problemi di affidabilità dell'orologio originale [problemi di overflow, eventi duplicati e sorveglianza del percorso di rete] – Nissim

+0

Oppure controlla i file su un evento che si verifica prima che sia dipinto e visualizzato sullo schermo. Funziona bene per il menu contestuale. (modifica: Sembra bello Nissim, condividi?: P) – negligible

risposta

1

Vorrei semplicemente ottenere il tipo di eccezione interna, quindi decidere in base a errori cosa fare (riavviare o fallire).

Così

myWatcher.Error += new ErrorEventHandler(OnError); 

Followde da

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

Ho effettivamente risolto tutti i problemi di overflow utilizzando una coda di blocco – Nissim

2

dipende dall'errore sicuramente?

  1. Se sono troppi dati perché il buffer è stato sovraccaricato (molte modifiche) fare una lista di directory e prendere le modifiche che stai cercando.
  2. Se sono troppi dati perché non si elaborano gli eventi FileSystemWatcher abbastanza rapidamente, assicurarsi di elaborarli in modo efficiente.
  3. La directory eliminata, non può fare nulla al riguardo se non quella di eliminare FileSystemWatcher, o forse guardare il genitore per una ricreazione di quel nome di directory di nuovo.