Ejemplo n.º 1
0
        //========================================================================================
        // Methods
        //========================================================================================

        /// <summary>
        /// This is the worker method for the Librarian background thread.  It implements
        /// a continual loop waiting for scanning tasks to perform.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = (BackgroundWorker)sender;

            while (!worker.CancellationPending)
            {
                scanner = queue.Dequeue();

                if (worker.CancellationPending)
                {
                    break;
                }

                if (watcher != null)
                {
                    // Disable the watcher while scanning is active.  This way we won't have
                    // file lock contentions or complex threading issues.
                    watcher.EnableRaisingEvents = false;
                }

                ProgressChangedEventHandler progressHandler =
                    new ProgressChangedEventHandler(DoScannerProgressChanged);

                scanner.ProgressChanged += progressHandler;

                worker.ReportProgress(10,
                                      new ScanningProgress(ScannerState.Beginning, scanner.Name));

                try
                {
                    scanner.Execute();
                }
                catch (Exception exc)
                {
                    App.LogException(new SmartException(exc));
                }

                RemoveScanner(scanner);

                if (watcher != null)
                {
                    watcher.EnableRaisingEvents = true;
                }

                worker.ReportProgress(100,
                                      new ScanningProgress(ScannerState.Completed, scanner.Name));

                lock (sync)
                {
                    scanner.ProgressChanged -= progressHandler;
                    scanner = null;
                }
            }
        }
Ejemplo n.º 2
0
        //========================================================================================
        // Methods
        //========================================================================================
        /// <summary>
        /// This is the worker method for the Librarian background thread.  It implements
        /// a continual loop waiting for scanning tasks to perform.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = (BackgroundWorker)sender;

            while (!worker.CancellationPending)
            {
                scanner = queue.Dequeue();

                if (worker.CancellationPending)
                {
                    break;
                }

                if (watcher != null)
                {
                    // Disable the watcher while scanning is active.  This way we won't have
                    // file lock contentions or complex threading issues.
                    watcher.EnableRaisingEvents = false;
                }

                ProgressChangedEventHandler progressHandler =
                    new ProgressChangedEventHandler(DoScannerProgressChanged);

                scanner.ProgressChanged += progressHandler;

                worker.ReportProgress(10,
                    new ScanningProgress(ScannerState.Beginning, scanner.Name));

                try
                {
                    scanner.Execute();
                }
                catch (Exception exc)
                {
                    App.LogException(new SmartException(exc));
                }

                RemoveScanner(scanner);

                if (watcher != null)
                {
                    watcher.EnableRaisingEvents = true;
                }

                worker.ReportProgress(100,
                    new ScanningProgress(ScannerState.Completed, scanner.Name));

                lock (sync)
                {
                    scanner.ProgressChanged -= progressHandler;
                    scanner = null;
                }
            }
        }