private void ResolverThread() { ThumbnailParameters thumbnailParameters = null; do { lock (m_resourcesToResolve) { if (m_resourcesToResolve.Count > 0) { thumbnailParameters = m_resourcesToResolve.Dequeue(); } else { thumbnailParameters = null; } } if (thumbnailParameters != null) { lock (m_resolvers) { object thumbnailImage = null; foreach (var resolver in m_resolvers) { try { thumbnailImage = resolver.Resolve(thumbnailParameters); if (thumbnailImage != null) { // Add it to the resolved queue lock (m_resolvedResources) { m_resolvedResources.Enqueue(new ResolvedThumbnail(thumbnailParameters.Source, thumbnailImage)); } break; } } catch (Exception ex) { Outputs.WriteLine(OutputMessageType.Warning, ex.Message); } } // Signal that no resolver managed to generate the image if (thumbnailImage == null) { lock (m_resolvedResources) { m_resolvedResources.Enqueue(new ResolvedThumbnail(thumbnailParameters.Source, thumbnailImage)); } } } } }while (thumbnailParameters != null); }
/// <summary> /// Resolves the Resource into a path to a thumbnail image file using a background thread</summary> /// <param name="resourceUri">URI of the resource to resolve</param> public void ResolveThumbnail(ThumbnailParameters resourceUri) { // Push the resource onto the resolve queue lock (m_resourcesToResolve) { m_resourcesToResolve.Enqueue(resourceUri); } if (!IsThreadAlive()) { StartThread(); } }
/// <summary> /// Resolves the Resource into a path to a thumbnail image file</summary> /// <param name="resourceUri">URI of the resource to resolve</param> /// <returns>Path to thumbnail image file</returns> public object ResolveThumbnailBlocking(ThumbnailParameters resourceUri) { object thumbnailImage = null; foreach (IThumbnailResolver resolver in m_resolvers) { thumbnailImage = resolver.Resolve(resourceUri); if (thumbnailImage != null) { break; } } return(thumbnailImage); }
/// <summary> /// Resolves the Resource into a path to a thumbnail image file</summary> /// <param name="resourceUri">URI of the resource to resolve</param> /// <returns>Path to thumbnail image file</returns> public object ResolveThumbnailBlocking(ThumbnailParameters resourceUri) { object thumbnailImage = null; foreach (IThumbnailResolver resolver in m_resolvers) { thumbnailImage = resolver.Resolve(resourceUri); if (thumbnailImage != null) { break; } } return thumbnailImage; }