Ejemplo n.º 1
0
        private void ScannerThread()
        {
            try {
                bool          firstRun = true;
                WeakReference _hostRef = new WeakReference(this);
                while (_hostRef.IsAlive)
                {
                    // Notify that a scan cycle completed
                    bool scanCompleted = false;
                    lock (_queueLock) {
                        scanCompleted = !firstRun && _queue.Count < 1;
                    }
                    if (scanCompleted)
                    {
                        scanCompleted = false;
                        var eh = ScanCompleted;
                        eh?.Invoke(this, new EventArgs());
                    }
                    firstRun = false;

                    _scannerEvent.WaitOne(); // Wait for signal to process data
                    ScannerQueueEntry entry = null;
                    lock (_queueLock) { entry = _queue[0]; _queue.RemoveAt(0); }
                    if (entry != null)
                    {
                        // Scan entry
                        CreateEntriesFromFileSystem(new DirectoryInfo(new Uri(entry.Url).LocalPath), entry.Filter, entry.Recurse);
                    }
                }
            } catch (Exception ex) {
            }
        }
Ejemplo n.º 2
0
 public void QueueScanEntry(ScannerQueueEntry entry, bool urgent = false)
 {
     lock (_queueLock) {
         if (!urgent)
         {
             _queue.Add(entry);
         }
         else
         {
             _queue.Insert(0, entry);
         }
     }
     _scannerEvent.Set();
 }