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()));
 }