gpt4 book ai didi

c# - 严格计时应用中的 MediaElement & DispatcherTimer

转载 作者:行者123 更新时间:2023-11-30 14:15:46 56 4
gpt4 key购买 nike

我目前正在开发一个要求严格计时的 WPF 应用程序,比如迟到 2 秒很重要。

我有一个 MediaElement mediaPlayer,它会在每次触发 Dispatcher 计时器时寻找新位置并播放。但我注意到 mediaPlayer.Position 与计时器不太同步。在下面的示例中,我将 dispatcherTimer 设置为在 55 秒后触发,但是在 timer_Tick 中从 MessageBox 接收到的值为 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秒是 Not Acceptable 。有谁知道如何实现这种效果?

更新目的:我正在尝试根据音频的播放位置“切换插图图像”。例如,当解说员在音频中读到“……我们有一座漂亮的房子”时,程序会显示一栋漂亮建筑的图片。但是现在由于位置晚了,它会在音频提到之前很久就显示图片。

最佳答案

如前所述,加载媒体元素需要时间,因此使用倒数计时器并不明智。你应该反过来做:DispatchTimer 每秒触发 1 或 2 次,当它被触发时你检查媒体元素的位置。如果它在某个位置,则显示图片。

这种方法还限制了 DispatchTimer 事件的时间间隔的最大错误,假设系统准确地触发了它们。

关于c# - 严格计时应用中的 MediaElement & DispatcherTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9387813/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com