私のフォームでは、小さなメディア プレーヤーがあります。これは非常に基本的なもので、ネスト、前、再生、停止、音量の増加、トラック バーなどの基本的な機能を備えています。このコードでトラックバーをドラッグして曲を探すことができました:: (トラックバーの最大値がサウンドファイルの合計秒数であると仮定します)
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);
}
これは別のスレッドで実行する必要があると思いますよね?しかし、問題は、それを行うと、トラックバーが作成されたスレッド以外のスレッドで使用されているという迷惑なメッセージが表示される..どうすればそれを回避できますか?
MouseLeave
このコードをとイベントの両方に入れたかったMouseEnter
のですが、同じスレッド上にあり、アプリがフリーズするため、意味がありません..
バーを自分で動かすにはどうすればよいですか?