Hirdetés

Új hozzászólás Aktív témák

  • trisztan94

    őstag

    Sziasztok!

    MediaElement-el bénázok. Egy animáció közepén szeretnék lejátszani egy távoli serveren lévő mp3 fájlt, de fontos,hogy az animáció csak akkor lépjen tovább, ha vége az mp3nak.

    VisualStateManager-rel csináltam az animációkat, ezek a State-ek vannak

    SlideIn
    SlideOut

    Az lenne a terv, hogy miután beúszott a UI elem, de még mieltt kiúszott volna játszom le a hangot.

    De most jön a csavar: nem is egy, de kettő hangot szeretnék lejátszani egy bizonyos sorrenben. Először lejátszani az elsőt, ha az végigment lejátszani a másodikat, és ha az is befejeződött, elindítani a SlideOut animációt.

    Valószínűleg nagyon nagy hülyeséggel próbálkoztam:

    Létrehoztam két MediaElementet XAML-ben: media1, media2

    Itt a code behind:

    private async void play1(int i)
    {
    Dispatcher.BeginInvoke(() =>
    {
    media1.Source = new Uri(string.Format("{0}m{1}hu_HU.mp3", mp3HostName, sentences[i].id), UriKind.Absolute);
    media1.MediaOpened += (object arg1, RoutedEventArgs arg2) =>
    {
    media1.Play();
    };
    });

    }

    private async void play2(int i)
    {
    Dispatcher.BeginInvoke(() =>
    {
    media2.Source = new Uri(string.Format("{0}m{1}en_US.mp3", mp3HostName, sentences[i].id), UriKind.Absolute);
    media2.MediaOpened += (object arg1, RoutedEventArgs arg2) =>
    {
    media2.Play();
    };
    });

    }

    private async void Animate()
    {
    VisualStateManager.GoToState(this, "SlideIn", true);

    Task taska = Task.Factory.StartNew(()=>play1(i));
    await taska;
    if(taska.IsCompleted)
    {
    Task taskb = Task.Factory.StartNew(() => play2(i));
    await taskb;
    if(taskb.IsCompleted)
    {
    VisualStateManager.GoToState(this, "SlideOut", true);
    }

    }
    }

    Viszont mivel írok ide, kitalálható, hogy nagyon nem múködik. De úgy nagyon nagyon nem.

    Hogyan kell ezt normálisan véghezvinni?

Új hozzászólás Aktív témák