/// <summary> /// Gets the instance of the media player to initialize /// our base classes with /// </summary> protected override MediaPlayerBase OnRequestMediaPlayer() { var player = new MediaUriPlayer(); return player; }
/// <summary> /// Gets the instance of the media player to initialize /// our base classes with /// </summary> protected override MediaPlayerBase OnRequestMediaPlayer() { var player = new MediaUriPlayer(); player.BufferedPercentChanged += OnMediaPlayerBufferedPercentChanged; return player; }
/// <summary> /// Creates a new MediaUriPlayer, /// running on it's own Dispatcher /// </summary> public static MediaUriPlayer CreateMediaUriPlayer() { MediaUriPlayer player = null; var reset = new ManualResetEvent(false); var t = new Thread((ThreadStart) delegate { player = new MediaUriPlayer(); /* Make our thread name a little unique */ Thread.CurrentThread.Name = string.Format("MediaUriPlayer Graph {0}", player.GraphInstanceId); /* We queue up a method to execute * when the Dispatcher is ran. * This will wake up the calling thread. */ player.Dispatcher.Invoke((Action) (() => reset.Set())); Dispatcher.Run(); }) { IsBackground = true }; t.SetApartmentState(ApartmentState.MTA); /* Set this to low priority now and we'll * set it back to normal later on in hope * that our UI thread's priority stays higher */ t.Priority = ThreadPriority.Lowest; /* Starts the thread and creates the object */ t.Start(); /* We wait until our object is created and * the new Dispatcher is running */ reset.WaitOne(); return player; }