Изменить источник в MediaElement (SILVERLIGHT)

Я хотел бы изменить песню на моем MediaElent с track1.mp3 на track2.mp3. А вот код:

MyMediaElement.Stop();
Uri u = new Uri("track2.mp3", UriKind.Relative);
MyMediaElement.Source=u;
MyMediaElement.Play();

MediaElement меняет источник, но просто не запускается. Что могло быть не так с этим кодом?


person Krika    schedule 12.02.2010    source источник


Ответы (4)


Попробуйте установить для MyMediaElement.AutoPlay значение true, как только источник изменится, он должен воспроизводиться. Вы также можете изучить метод MediaElement.SetSource (), который принимает поток, а не uri.

person Jason Roberts    schedule 15.02.2010

У меня такая же проблема. Я мог бы установить автовоспроизведение и исходный код в XAML, и это сработало бы, но если бы я изменил исходный код в коде, он просто ничего не сделал бы.
Я зафиксировал событие MediaOpened элемента управления.
Проблема в том, что он нажимает Play () сразу после того, как вы изменили источник, поэтому текущее состояние закрывается. Для изменения состояния требуется несколько тактов. Итак, если вы поместите Play (); внутри этого обработчика событий он будет работать.

person Community    schedule 25.02.2010

Похоже, вы не делаете ничего плохого. Вот пара диагностик, которые я бы попробовал: -

Укажите track2 в качестве исходного файла, это работает?

Присоединитесь к событию MediaFailed, оно запускается?

Привяжите TextBlock к свойству CurrentState, чтобы наблюдать за изменением CurrentState.

person AnthonyWJones    schedule 12.02.2010
comment
Спасибо за ответ! Событие MediaFailed не запускается. И я проверил свойство CurrentState, и когда я пытаюсь изменить трек, он просто говорит «Закрыто». Закрыто? Что это обозначает? Источник исправлен. - person Krika; 13.02.2010
comment
@ krika02: означает, что MediaElement считает, что в настоящее время он не содержит мультимедиа. Что немного странно, так как вы его четко установили. Если изначально конкретный track2, реально ли удается его воспроизвести? - person AnthonyWJones; 14.02.2010

Вы устанавливаете AutoPlay в false, а затем в обработчике MediaOpened делаете Play(). Люди как бы намекали на решение здесь, но не очень точно. Вы также можете обработать событие MediaFailed на случай, если по какой-либо причине медиа не открывается (не удается найти файл и т. Д.).

person Jonny    schedule 13.08.2011