Example #1
0
        private void ProcessFailedWatchersQueue(object sender, DoWorkEventArgs e)
        {
            var worker = sender as BackgroundWorker;
            IDirectoryWatcher watcher = null;
            bool enqueueWatcher       = true;

            do
            {
                if (this._failedWatchers.TryDequeue(out watcher))
                {
                    try
                    {
                        var errArgs = watcher.CheckMonitoredPath().Result;
                        if (errArgs == null)
                        {// no errors detected
                            watcher.InitializeWatcher();

                            watcher.FileArrivedAsync += HandleFileArrivalAsync;
                            watcher.ErrorAsync       += HandleWatcherErrorAsync;

                            watcher.IsEnabled = true;

                            watcher.CheckForExistingFiles();

                            enqueueWatcher = false;
                        }
                    }
                    catch
                    {
                        // log error
                    }
                    finally
                    {
                        if (enqueueWatcher)
                        {
                            this._failedWatchers.Enqueue(watcher);
                        }
                        else
                        {
                            // log re init
                        }
                    }
                }
            } while (watcher != null);
        }