我想用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()
引发异常)。
答案 0 :(得分:0)
我之前使用DispatchTimer
代替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
}
}