В настоящее время я занимаюсь разработкой приложения WPF, которое требует строгой синхронизации, говорит, что опоздание на 2 секунды имеет значение.
У меня есть MediaElement mediaPlayer, который ищет новую позицию и воспроизводит каждый раз, когда срабатывает таймер диспетчера. Но я замечаю, что mediaPlayer.Position не очень синхронизируется с таймером. В приведенном ниже примере я установил dispatcherTimer, запущенный через 55 секунд, но значение, полученное от MessageBox в timer_Tick, равно 108.276746, то есть с опозданием на 2 секунды (55 + 55 = 110).
private void button1_Click(object sender, RoutedEventArgs e)
{
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(55);
timer.Tick += new EventHandler(timer_Tick);
mediaPlayer.Source = new Uri("test.wma", UriKind.Relative);
_currentPosition = 55;
mediaPlayer.Position = TimeSpan.FromSeconds(_currentPosition);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
MessageBox.Show("Position" + mediaPlayer.Position.TotalSeconds);// print around 108 seconds
}
Это проблема, потому что мне нужно, чтобы позиция mediaPlayer идеально синхронизировалась с таймером диспетчера.
Для получения дополнительной информации коренная проблема здесь такова: Таймер диспетчера строго следит за ходом mediaElement , потому что мне нужно синхронизировать другие элементы управления с позицией, что mediaPlayer. Опоздание на 2 секунды недопустимо. Кто-нибудь знает, как добиться этого эффекта?
ЦЕЛЬ ОБНОВЛЕНИЯ : Я пытаюсь "переключить изображение иллюстрации" в соответствии с положением воспроизведения от аудио. Например, когда рассказчик прочитал «... У нас красивый дом» в аудио, программа покажет фотографии красивого здания. Но теперь, когда позиция задерживается, она покажет изображение задолго до того, как аудио упомянет о нем.