以我的形式,我有一个小型媒体播放器,非常基本,具有基本功能
嵌套,上一个,播放,停止,音量增加和轨迹栏。
我可以通过以下代码拖动轨迹栏来查找歌曲:
(假设轨迹栏的最大值是声音文件的总秒数)
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被用于不是在..上创建的线程的线程中。
我该如何解决?
我想将此代码同时放在
MouseLeave
和MouseEnter
事件中,但这是没有意义的,因为它将在同一线程上并且该应用程序将冻结。我怎样才能使它自己移动呢?
最佳答案
您应该创建一个间隔为1,000毫秒的WinForms Timer
,并在其Tick
事件中更新轨迹栏。