private static bool ShouldSkipPreviewFor(MediaElementThumnailGrabber.ThumbnailWorkerParameters parameters) { if (parameters.Source == (Uri)null || !parameters.Source.IsAbsoluteUri) { return(true); } string localPath = parameters.Source.LocalPath; return(string.IsNullOrEmpty(localPath) || !PathHelper.FileExists(localPath)); }
private void ProcessNextQueueItem() { if (this.workQueue.Count == 0) { if (this.workerMediaPlayer == null) { return; } this.workerMediaPlayer.MediaOpened -= new EventHandler(this.OnMediaOpened); this.workerMediaPlayer.MediaFailed -= new EventHandler <ExceptionEventArgs>(this.OnMediaFailed); this.workerMediaPlayer.Close(); this.workerMediaPlayer = (MediaPlayer)null; } else { MediaElementThumnailGrabber.ThumbnailWorkerParameters parameters = this.workQueue.Peek(); if (MediaElementThumnailGrabber.ShouldSkipPreviewFor(parameters)) { this.workQueue.Dequeue(); UIThreadDispatcher.Instance.BeginInvoke(DispatcherPriority.Normal, (Action)(() => this.ProcessNextQueueItem())); } else { if (this.workerMediaPlayer == null) { this.workerMediaPlayer = new MediaPlayer(); this.workerMediaPlayer.MediaOpened += new EventHandler(this.OnMediaOpened); this.workerMediaPlayer.MediaFailed += new EventHandler <ExceptionEventArgs>(this.OnMediaFailed); } if (this.workerMediaPlayer.Source != parameters.Source) { try { this.workerMediaPlayer.ScrubbingEnabled = false; this.workerMediaPlayer.Open(parameters.Source); } catch (Exception ex) { this.HandleLoadFail(); } } else { this.MoveToNextWorkItem(this.RenderFrame(), (string)null); } } } }
public void BeginGrabThumbnail(Uri source, Action <Uri, BitmapSource, string> callback) { if (!this.SupportsFirstFramePreview) { return; } MediaElementThumnailGrabber.ThumbnailWorkerParameters workerParameters = new MediaElementThumnailGrabber.ThumbnailWorkerParameters(); workerParameters.Source = source; workerParameters.Callback = callback; bool flag = this.workQueue.Count > 0; this.workQueue.Enqueue(workerParameters); if (flag) { return; } UIThreadDispatcher.Instance.BeginInvoke(DispatcherPriority.Normal, (Action)(() => this.ProcessNextQueueItem())); }
private void MoveToNextWorkItem(BitmapSource image, string errorMessage) { MediaElementThumnailGrabber.ThumbnailWorkerParameters workerParameters = this.workQueue.Dequeue(); workerParameters.Callback(workerParameters.Source, image, errorMessage); UIThreadDispatcher.Instance.BeginInvoke(DispatcherPriority.Normal, (Action)(() => this.ProcessNextQueueItem())); }