0

the function playMedia is called again and again inside the timer_tick function for 60 sec...how do i call it just once so that my song plays continuously for that interval without looping.... here song is my media element..

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        timer.Start();
        timer.Tick +=timer_tick;
    }

int flagmusic=0;

public void timer_tick(object sender, object args)
{
  //if some condition which is true for 60 secs
   playMedia();
  //else
  song.stop();
}

 private void playMedia()
    {

         try
         {
                 Uri pathUri = new Uri("ms-appx:///Assets/breath.mp3");
                 song.Source = pathUri;
                 song.Play();
        }
        catch { }

    }
4

1 回答 1

1

我不完全确定我正确地解释了你的问题。据我了解,当OnNavigatedTo被调用时,您想开始播放歌曲,让它播放 60 秒,然后停止。

如果这是真的,我将首先在类范围内创建我的计时器,并在程序启动时对其进行初始化:

Timer timer = new Timer();
timer.Tick += timer_tick;
timer.Interval = 60000;
timer.Stop();  // make sure it's not running

OnNavigatedTo中,启动声音并启动计时器。

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    playMedia();
    timer.Start();
}

所以歌曲正在播放,计时器正在运行。当计时器滴答作响时,停止播放歌曲并停止计时器。

public void timer_tick(object sender, object args)
{
    timer.Stop();
    song.stop();
}

它在您的原始代码中多次播放歌曲的原因是每次OnNavigatedTo调用时,都会将该行timer.Tick += timer_tick;添加到计时器事件的调用列表中。所以第一次调用该函数时,歌曲播放了一次。下一次,它播放了两次。然后是三、四等。

于 2013-07-03T22:13:21.607 回答