Search code examples
c#winformstrackbar

C# winform, how to make the track bar move (increase its value) along with a sound file?


in my form, I have a small media player, it's pretty basic, it has the basic functionalists nest, previous, play, stop, volume increasing and a track bar. I was able to seek the song by dragging the track bar via this code:: (Assuming that the maximum value of the track bar is the total number of seconds of the sound file)

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

But I wasn't able to make the bar move forward by itself when the music is playing .. I came up with this idea:

let's say we have a 90 secs duration song. now the track bar maximum value is 100 so: 100 --> 90 1 --> X X = 0.9 sec this is the interval between the ticks of the bar and the value that the track bar value should be increased in every tick. Here is my code:

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

Now I think this should be run in a separate thread right ? but the problem, when i do that, I get the annoying message of saying that the TrackBar is being used in a thread other than the thread it was created on .. how can i get around that ?

I wanted to put this code in both the MouseLeave and MouseEnter events, but it's pointless, cuz it will be on the same thread and the app will freeze..

How can i make the bar move by it self ?


Solution

  • You should create a WinForms Timer with an interval or 1,000 milliseconds, and update the trackbar in its Tick event.