0

我想用它MediaElement来播放音乐,当音乐播放到某个位置时,做一些动作。代码是这样的:

private void button1_Click(object sender, RoutedEventArgs e)
{
    mediaElement1.Play();
    game_pose_poller.RunWorkerAsync(); // game_pose_poller is a BackgroundWorker object
    button1.IsEnabled = false;
}

private void game_pose_poller_DoWork(object sender, DoWorkEventArgs e)
{
    while(true)
    {
        if (mediaElement1.Position >= sometime)
        {
            // do something

但是我发现该程序根本没有做任何事情。调试时我发现它mediaElement1.Position总是为零。为什么即使Play()调用后它总是为零?mediaElement1.Source是作为资源包含在项目中的 mp3 文件,并且LoadedBehavior是手动的(或Play()引发异常)。

4

1 回答 1

0

前段时间我用 aDispatchTimer而不是 a做了类似的事情BackgroundWorker。这就是我让它工作的方式:

private DispatcherTimer positionTimer;

private void button1_Click(object sender, RoutedEventArgs e)
{
    // Create a timer that will check your condition (every second for example)
    positionTimer= new DispatcherTimer();
    positionTimer.Interval = TimeSpan.FromSeconds(1);
    positionTimer.Tick += new EventHandler(positionTimerTick);
    positionTimer.Start();

    mediaElement1.Play();
    button1.IsEnabled = false;
}

void positionTimerTick(object sender, EventArgs e)
{
    if (mediaElement1.Position.TotalSeconds >= sometime)
    {
        // do something
    }
}
于 2013-07-18T09:53:27.840 回答