C# WPF MVVM 使用滑块控制媒体播放器位置会使音频卡顿



对于初学者来说,就目前而言,其他一切都很完美。所以我有一个项目,其中包括音乐播放器部分(媒体播放器)。位置通过文本和滑块可视化,这就是我的问题所在。当我使滑块"可拖动"(这样我就可以设置位置,而不仅仅是获取它)时,媒体(.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 仍然可以拖动。

最新更新