protected override void Dequeue()
        {
            CandidateFile candidate;
            if (queue.TryDequeue(out candidate))
            {
                try
                {
                    if (ExifProvider.IsExifAvailable(basePath, candidate.FullFilename))
                    {
                        logger.Error("prepare: exif exists for {0}", candidate.FullFilename);
                        enqueueCreate(candidate);
                    }
                    else
                    {
                        lock (exifFolders)
                        {
                            var key = ExifProvider.GetFolderKey(candidate.FullFilename);
                            ExifFolder exifFolder;
                            if (!exifFolders.TryGetValue(key, out exifFolder))
                            {
                                exifFolder = new ExifFolder(Path.GetDirectoryName(candidate.FullFilename), candidate);
                                exifFolders[key] = exifFolder;

                                enqueueGetExif(exifFolder);
                            }
                            else
                            {
                                exifFolder.Add(candidate);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    logger.Error("Exception preparing {0}: {1}", candidate.FullFilename, e);
                }
            }
            else
            {
                Thread.Sleep(0);
            }
        }
 public void Enqueue(ExifFolder exifFolder)
 {
     queue.Enqueue(exifFolder);
 }