以我的形式,我有一个小型媒体播放器,非常基本,具有基本功能
嵌套,上一个,播放,停止,音量增加和轨迹栏。
我可以通过以下代码拖动轨迹栏来查找歌曲:
(假设轨迹栏的最大值是声音文件的总秒数)

private void SeekBar_Scroll(object sender, EventArgs e)
{
   Player.Position = TimeSpan.FromSeconds(SeekBar.Value);
}


但是当音乐正在播放时,我无法使音条本身向前移动..
我想到了这个主意:

假设我们有一首持续时间为90秒的歌曲。
现在轨迹栏的最大值是100
所以:
100-> 90
 1-> X
X = 0.9秒
这是条形刻度线之间的间隔,以及每个刻度线应增加跟踪条值的值。这是我的代码:

while (SeekBar.Value < 100)
{
  System.Windows.Duration duration = Player.NaturalDuration;
  SeekBar.Value += duration.TimeSpan.Seconds / 100;
  Thread.Sleep(duration.TimeSpan.Seconds * 10);
}


现在我认为这应该在单独的线程中运行,对吗?
但是问题是,当我这样做时,我得到的烦人的消息是说TrackBar被用于不是在..上创建的线程的线程中。
我该如何解决?

我想将此代码同时放在MouseLeaveMouseEnter事件中,但这是没有意义的,因为它将在同一线程上并且该应用程序将冻结。

我怎样才能使它自己移动呢?

最佳答案

您应该创建一个间隔为1,000毫秒的WinForms Timer,并在其Tick事件中更新轨迹栏。

10-06 11:16