c# - 如何在 Xamarin.Forms 中制作平滑移动的音频 slider

标签 c# multithreading audio xamarin.forms task

如何在 Xamarin.Forms 中制作流畅的移动音频播放器?这就是我尝试过的:

  • 使用 MediaPlayer 播放音频文件。媒体播放器用于
    一个名为“AudioPlayer”的服务。
  • 属性“AudioPosition”绑定(bind)到 slider 的值。
  • 有一个取消 token 用于取消播放。

  • 代码如下:
      await Task.Run(
                () =>
                    {
                        while (!ct.IsCancellationRequested)
                        {
                            this.AudioPosition = this.audioPlayer.CurrentPosition;
                        }
                    },
                ct);
    

    如果我播放音频文件 ,这非常有用一次 .但是,如果我尝试重播文件几次,UI 会越来越多地被阻塞。似乎 Task.Run() 总是创建一个新任务并且不会“处理”旧任务..?

    我还尝试更新 Device.InvokeOnMainThread() 中的值如果我使用它, slider 将不会得到更新。

    如何在文件流畅播放时更新音频 slider ?

    最佳答案

    您是否尝试过使用 Timer 而不是带有 while 循环的 Task?

    我假设您的应用程序是唯一一个控制播放的应用程序 - 因此您可以在播放暂停/停止事件处理程序/命令中处理计时器。

    您提供的代码量不足以提供更高级的建议。

    关于c# - 如何在 Xamarin.Forms 中制作平滑移动的音频 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44392810/

    相关文章:

    Java获取线程实例的数量

    java - 在android中重复启动和停止一个线程

    javascript - 计算没有音频 API 的 ArrayBuffer 的持续时间?

    android - Superpowered - 导出到带有混音器和解码器问题的文件(不同的 sampleRates 和 samplesPerFrame)

    c# - ReactiveList.AddRange(IEnumerable<T> collection) 为集合中的每个项目触发

    c# - session 关闭后加载子对象

    c# - 在wpf中绘制双线

    c# - WCF:如何从服务库实例内部访问服务实例?

    Java使线程同时启动

    ruby - 在 Mac 上生成音调/正弦波的简单方法? ( ruby 会很好)