Windows phone 7 MediaElement重复播放异常

Windows phone 7 MediaElement重复播放异常,windows-phone-7,isolatedstorage,mediaelement,Windows Phone 7,Isolatedstorage,Mediaelement,我是WP7新手,当我按下一个按钮时,我试图用MediaElement播放声音。 它可以工作,但不幸的是,当我在声音开始之前反复按下按钮时,我得到了“不允许对IsolatedStorageFileStream进行操作”的异常。我怎样才能避免呢 播放方法: public void Play(string filename) { try { mediaElement.Stop(); mediaElement.ClearValue(MediaElement

我是WP7新手,当我按下一个按钮时,我试图用
MediaElement
播放声音。 它可以工作,但不幸的是,当我在声音开始之前反复按下按钮时,我得到了“不允许对IsolatedStorageFileStream进行操作”的异常。我怎样才能避免呢

播放方法:

public void Play(string filename)
{
    try
    {
        mediaElement.Stop();
        mediaElement.ClearValue(MediaElement.SourceProperty);

        using (var isf = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream fileStream = isf.OpenFile(@"shared\transfers\" + filename, FileMode.Open))
            {
                mediaElement.SetSource(fileStream);
                mediaElement.IsMuted = false;
                mediaElement.Volume = 1.0;
            }
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
}
事件处理程序:

void me_MediaOpened(object sender, RoutedEventArgs e)
{
    mediaElement.Play();
}

void me_MediaEnded(object sender, RoutedEventArgs e)
{
    mediaElement.ClearValue(MediaElement.SourceProperty);
}

如果您希望允许用户只单击“播放”按钮一次。一种方法是

public bool IsPlaying = false;
    void me_MediaOpened(object sender, RoutedEventArgs e)
        {


    if(!IsPlaying){
        mediaElement.Play();
        IsPlaying = true;
        }
    }

    void me_MediaEnded(object sender, RoutedEventArgs e)
    {
        if(IsPlaying){
        mediaElement.ClearValue(MediaElement.SourceProperty);
        IsPlaying = false;
        }
}

如果您处理的是较小的流,则在播放之前将
文件流加载到
内存流
会使其更加灵活。

MediaElement不允许播放
内存流
。我接受你的解决方案,因为正如你提到的,我是用一个旗子做的。区别在于:我在开始打开时将标志设置为真,如果媒体打开,则设置为假。