对于初学者来说,就目前而言,其他一切都很完美。所以我有一个项目,其中包括音乐播放器部分(媒体播放器)。位置通过文本和滑块可视化,这就是我的问题所在。当我使滑块"可拖动"(这样我就可以设置位置,而不仅仅是获取它)时,媒体(.mp3)开始随机卡顿。这是代码的一部分:
public double ElapsedSeconds
{
get
{
return mediaPlayer.Position.TotalSeconds;
}
set
{
//mediaPlayer.Position = TimeSpan.FromSeconds(value);
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ElapsedSeconds)));
}
}
private void Timer_Tick(object sender, EventArgs e)
{
ElapsedSeconds = mediaPlayer.Position.TotalSeconds;
TextContent = String.Format("{0} - {1} - {2:mm\:ss}/{3:mm\:ss}", playedArtist, playedTitle, TimeSpan.FromSeconds(ElapsedSeconds), TimeSpan.FromSeconds(TotalSeconds));
}
已用秒绑定到滑块的值。我只能在取消注释那 1 行时拖动滑块(并创建问题)
这是我已经尝试过的:
- 我使用私有字段来存储数据
- 尝试使用毫秒和刻度,但情况变得更糟
- 尝试更改调度程序计时器的时钟周期频率(当前为 100 毫秒),刷新当前值
有没有办法让口吃消失?(如果是,那是什么)
p.s.:如果有人感兴趣,这里是整个.cs文件:GitHub Link
在将近 2 周没有思考这个问题后,我找到了解决方案。只需要一个条件来设置位置(所以我将注释行更改为这些):
if (mediaPlayer.Position > TimeSpan.FromSeconds(value + 1) || mediaPlayer.Position < TimeSpan.FromSeconds(value - 1))
mediaPlayer.Position = TimeSpan.FromSeconds(value);
尽管至少需要 1 秒的更改,但这样程序就会忽略导致卡顿的毫秒回滚,而 Slider 仍然可以拖动。