В настоящее время я разрабатываю приложение WPF, которое требует строгого времени, говорит, опоздание на 2 секунды имеет значение.
У меня есть MediaElement mediaPlayer, который ищет новую позицию и воспроизводится каждый раз, когда срабатывает таймер Dispatcher. Но я замечаю, что 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 секунды недопустимо. Кто-нибудь знает, как добиться этого эффекта?
ЦЕЛЬ ОБНОВЛЕНИЯ: я пытаюсь «переключить изображение иллюстрации» в соответствии с позицией воспроизведения из аудио. Например, когда диктор читает в аудиозаписи «... У нас красивый дом», программа покажет изображения красивого здания. Но теперь, поскольку позиция опаздывает, она покажет картинку задолго до того, как звук упомянет ее.