C# 无法使用C中的轨迹栏更改音频位置#

C# 无法使用C中的轨迹栏更改音频位置#,c#,audio,timespan,trackbar,cscore,C#,Audio,Timespan,Trackbar,Cscore,我在一个小型音频播放器里工作。你知道,用最简单的东西和功能 我在更改轨迹栏的值(滚动)时遇到问题,此轨迹栏显示当前音频位置 当我拖动轨迹栏的滑块时,音频位置应该改变。 我正在使用CSCore音频库。 这是我用来更新音频播放当前位置的代码: private void ProgressTimerTick(object sender, EventArgs e) { SongProgressTrackbar.MaxValue = (int)audioPlayer.Length.TotalMillisec

我在一个小型音频播放器里工作。你知道,用最简单的东西和功能

我在更改轨迹栏的值(滚动)时遇到问题,此轨迹栏显示当前音频位置

当我拖动轨迹栏的滑块时,音频位置应该改变。 我正在使用CSCore音频库。 这是我用来更新音频播放当前位置的代码:

private void ProgressTimerTick(object sender, EventArgs e)
{
SongProgressTrackbar.MaxValue = (int)audioPlayer.Length.TotalMilliseconds;
SongProgress.Value = (int)audioPlayer.Position.TotalMilliseconds;
}
这是完美的,没有任何问题

但是这个

private void SongProgressTrackbar_Scroll(object sender, ScrollEventArgs e)
{
Timespan newPos = new Timespan(SongProgressTrackbar.Value);
audioPlayer.Position = newPos;
}
这里发生的事情是,当事件被触发时,音频再次进入开始,而不是将位置更改为我在轨迹栏中单击的位置,它再次开始

那么,我写错了什么?我尝试使用ValueChanged事件,但这只会使音频保持在0:00位置。正如我所说,计时器确实有效。但每当我滚动轨迹栏时,音频就会从头开始

希望有人能帮我解决这个问题。
提前感谢-CCB将轨迹栏值转换为时间时出现问题。您的代码返回微秒:

Timespan newPos = new Timespan(SongProgressTrackbar.Value);
您应该这样使用:(此返回秒)

此代码将轨迹栏转换为秒。
谢谢。

您应该将毫秒转换为滴答声。 一个滴答声代表一百纳秒或一千万分之一秒。一毫秒内有10000个滴答声,或一秒钟内有1000万个滴答声。 单个参数不使用TimeSpan获取值作为记号

Timespan newPos = new Timespan(SongProgressTrackbar.Value * 10000);

谢谢。

我的计时器的间隔为100毫秒。这就是我使用Total毫秒的原因。这个解决方案可以将我的时间跨度转换为秒,但这不是我想要的。不过还是要谢谢你。你有一个很明显的单位转换问题,现在你把时间单位设置为100纳秒。接近0。请改用TimeSpan.frommilluses()。谢谢!Timespan.From毫秒确实有效!请将您的评论作为解决方案发布,以标记它。
Timespan newPos = new Timespan(SongProgressTrackbar.Value * 10000);