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) { } }
public void QueueScanEntry(ScannerQueueEntry entry, bool urgent = false) { lock (_queueLock) { if (!urgent) { _queue.Add(entry); } else { _queue.Insert(0, entry); } } _scannerEvent.Set(); }