C# WPF mediaelement zmiana elementów po x czasie

0

Witam, mam problem ze zmianą filmów po x czasie
mam prosty counter:

        public static bool count(double time)
        {
            Stopwatch timer = new Stopwatch();
            timer.Start();
            while (true)
            {
                if (timer.ElapsedMilliseconds / 1000 >= time)
                {
                    timer.Stop();
                    return true;
                }
            }            
        } 

i gdy uruchamiam następujący kod: (win to okno WPF zawierające mediaelement,doWork ustawia Uri jako source playera i wywołuje play)

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            win.Show();
            Dispatcher.Invoke(DispatcherPriority.Background,
            new Action<Uri>(doWork), new Uri("D:\\test.wmv"));
            Task<bool> second = Task.Factory.StartNew(() => Timer.count(5));
            if (second.Result) doWork(new Uri("D:\\fff.flv"));
        } 

efekt jest taki, że przez 5 sekund mam dzwięk, a dopiero po 5 sekundach pojawia się 2 film czyli fff.flv, proszę o pomoc, lub wskazówkę/keyword gdzie znajdę jakąś pomoc. Dzięki

0
            while (true)
            {
                if (timer.ElapsedMilliseconds / 1000 >= time)
                {
                    timer.Stop();
                    return true;
                }
            }    

to jest "ciasna pętla". task czy nie task, tego nie należy robić.

przez 5 sekund mam dzwięk, a dopiero po 5 sekundach pojawia się 2 film
a jak powinno być?

0
Azarien napisał(a):

...

to jest "ciasna pętla". task czy nie task, tego nie należy robić.

przez 5 sekund mam dzwięk, a dopiero po 5 sekundach pojawia się 2 film
a jak powinno być?

Przez pierwsze 5 sekund powinien odtwarzać się film, zamiast tego mam jego dzwięk, oraz puste okno.

1

Problem rozwiązany, błąd był również w metodzie która wykonywała play, zabrakło dispatchera.
Wrzucam kod gdyby ktoś potrzebował

play:

        public void play()
        {
            this.Dispatcher.Invoke(DispatcherPriority.Normal,
            new Action(delegate()
            {
             this.thePlayer.Source = this.Source;
             this.thePlayer.UnloadedBehavior = MediaState.Manual;
             this.thePlayer.Play();
            }
            ));          
        } 

natomiast kod button1_click zmieniony na :

            win.Show();
            Dispatcher.Invoke(DispatcherPriority.Background,
            new Action<Uri>(doWork), new Uri("D:\\test.wmv"));
            Task<bool> second = new Task<bool>(()=>Timer.count(5));
            second.ContinueWith(doMoreWork, TaskContinuationOptions.NotOnFaulted);
            second.Start(); 

1 użytkowników online, w tym zalogowanych: 0, gości: 1