2012-07-26 10 views
5

FileSystemWatcher.Error etkinliğinden sonra, daha sonra ne yapacağımız konusunda hiçbir fikrim yok. istisnası [nispeten] minör bir, gözlemcisi'nın izliyor sürecini etkilemez dizineBir FileSystemWatcher hatası kurtarmak için en iyi uygulama nedir?

aynı anda

gibi

çok fazla değişiklik olabilir, ama aynı zamanda bir büyük olabilir sorun - izlenen dizinin silinmesi gibi, bu durumda izleyici artık işlevsel değildir.

Sorumum, Hata olayını işlemenin en iyi yolu nedir?

+2

FileSystemWatcher'ı kullanmayı bırakın, güvenilmez bir yoklama hizmeti yazın. – saj

+0

Orijinal izleyicinin güvenilirlik konularının çoğunu çözen değiştirilmiş bir FileSystemWatcher kullanıyorum [taşma sorunları, çoğaltılmış olaylar ve ağ yolu izleme] – Nissim

+0

Veya ekranda boyalı ve görüntülenmeden önce gerçekleşen bir olaydaki dosyaları kontrol edin. Bağlam menüsü için iyi çalışır. (düzenleme: Güzel Nissim, paylaşır mısınız?: P) – negligible

cevap

1

Sadece iç istisna türünü alırım, sonra ne yapması gerektiğine karar verir (yeniden başlat veya başarısız).

Yani

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

gönderilmeye devam edeceğim Engelleme sırasını kullanarak tüm taşma sorunlarını çözdüm – Nissim

2

tarafından

myWatcher.Error += new ErrorEventHandler(OnError); 

Followde mutlaka hata bağlıdır?

  1. Çok fazla veri varsa, arabellek doluydu (birçok değişiklik) bir liste dizini yapar ve sonradan aldığınız değişiklikleri yakalar.
  2. Çok fazla veri varsa, FileSystemWatcher olaylarını yeterince hızlı işlemiyorsanız, verimli bir şekilde işlediğinizden emin olun.
  3. Klasör silindi, FileSystemWatcher'ı atmaktan başka bir şey yapamaz ya da bir daha bu dizinin tekrar tekrar dinlenmesini izleyebilir.
İlgili konular