private void OnFileWatcherError(object sender, ErrorEventArgs e) { mutex.WaitOne(); Exception ex = e.GetException(); WatcherFailedEventArgs failedArg = new WatcherFailedEventArgs(); WatchingDirectoryRemoved?.Invoke(this, failedArg); mutex.Set(); if (failedArg.Action == WatcherFailedAction.Dispose) { Dispose(); } else { if (fileWatcher != null) { fileWatcher.Dispose(); } if (directoryWatcher != null) { directoryWatcher.Dispose(); } WatchingDirectory = failedArg.DirectoryIfResume; InitWatcher(); } }
private void OnWatcherFailed(object sender, WatcherFailedEventArgs e) { Watcher watcher = sender as Watcher; if (watcher == null) { return; } e.Action = WatcherFailedAction.Dispose; watcher.ItemAdded -= OnWatcherItemAdded; watcher.ItemRemoved -= OnWatcherItemRemoved; watcher.WatchingDirectoryRemoved -= OnWatcherFailed; watchers.Remove(watcher); }