Недавно я столкнулся с проблемой с WPF, когда при использовании MediaElement на странице WPF, которая инициализируется более одного раза, она не уничтожается из памяти или мигает черный фон, пока он находится всостояние непосредственно перед окончательной загрузкой и в моем пользовательском уничтожении
Для этой цели я создал оболочку, на каждой странице, где я использовал MediaElement, в конструкторе я создал экземпляр своей оболочки, которая добавлялаMediaElement к статическому общедоступному массиву других MediaElements и сохранял его там одновременно, пока я не вызвал RemoveAll (), который обновил память.Это не было бы проблемой, но когда я начал использовать это, я заметил, что это действительно медленно.Мое видео было загружено через 1 секунду, и оно никогда не кэшировалось (даже до использования моей обертки, я не знаю, как это сделать), и пользователь мог видеть этот черный фон непосредственно перед его воспроизведением и всякий раз, когда я вызывал RemoveAll (),на секунду.
В моем тестовом примере приложения мое MainWindow содержит:
<Grid>
<Frame x:Name="mainFrame"/>
</Grid>
, затем есть TestPage, по которому я перемещаюсь () по кнопке на другой странице "по умолчанию"На TestPage я пробую видео.Код TestPage:
<MediaElement Source="video/Test.mp4" Opacity="1" Volume="0" LoadedBehavior="Manual" Height="326" Width="580" x:Name="media"
UnloadedBehavior="Manual" Stretch="Fill"/>
В моей оболочке я подписываюсь на события, подобные MediaEnded
, поэтому я могу повторно воспроизводить видео, вызывая media.Play();
при срабатывании MediaEnded
.
Но у меня остается та же самая проблема, решение которой я не нашел.Если кто-то найдет способ, может быть, кроме использования MediaElement, я был бы благодарен.