c#任务栏进度栏,从Windows Media Player currentMedia.currentPosition获取值

c#任务栏进度栏,从Windows Media Player currentMedia.currentPosition获取值,c#,winforms,windows-media-player,windows-api-code-pack,C#,Winforms,Windows Media Player,Windows Api Code Pack,我试图通过以下方式获得价值,但没有成功: private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e) { TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal); axWindowsMediaPlayer1.Ctlcontrols.play(); axWindowsMediaPlayer1.Ctlco

我试图通过以下方式获得价值,但没有成功:

private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
    TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);
    axWindowsMediaPlayer1.Ctlcontrols.play();
    axWindowsMediaPlayer1.Ctlcontrols.currentItem =
                axWindowsMediaPlayer1.currentPlaylist.Item[listBox1.SelectedIndex];
    backgroundWorker2.RunWorkerAsync();
}

private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
    double val = 100*axWindowsMediaPlayer1.Ctlcontrols.currentPosition/axWindowsMediaPlayer1.currentMedia.duration;
    TaskbarManager.Instance.SetProgressValue((int)val,100);
}
我也不确定,我该把阻止进度的底线放在哪里,但我想现在考虑这个问题还为时过早,因为我无论如何都无法让进度发挥作用

是我如何使用backgroundWorker的问题,还是我如何更新值的问题,还是其他问题

提前感谢,

~~hlfrmn

编辑:

private void TaskbarProgressValueDeterminator()
{
TaskbarManager.Instance.SetProgressState(taskbarProgressState.Normal);
while(axWindowsMediaPlayer1.Ctlcontrols.currentPosition
后台工作人员只会更新一次进度。我希望在播放曲目时,您需要加入while循环或计时器来重复更新进度。

将SetProgressValue放入循环后,仍然不会发生任何事情。顺便说一句,我不知道我在一小时前写初始代码时在想什么。从外观上看,我非常确定“val”是易变的,backgroundWorker2是自动复制的。我决定暂时不使用该功能,但感谢您注意到代码中的错误。
private void TaskbarProgressValueDeterminator()
    {
        TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);
        while (axWindowsMediaPlayer1.Ctlcontrols.currentPosition < axWindowsMediaPlayer1.currentMedia.duration)
        {
            TaskbarManager.Instance.SetProgressValue((int)(100 * axWindowsMediaPlayer1.Ctlcontrols.currentPosition / axWindowsMediaPlayer1.currentMedia.duration), 100);
        }
        TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);
    }