【问题标题】:How to read an audio file from IsolatedStorage?如何从独立存储中读取音频文件?
【发布时间】:2013-09-25 15:02:13
【问题描述】:

我有一个音频文件存储在IsolatedStorage..

我想通过调用另一个类的方法来访问它:

using (IsolatedStorageFile isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
    using (IsolatedStorageFileStream fileStream = isolatedStorage.OpenFile(filePath, FileMode.Open, FileAccess.Read))
    {

        return fileStream;
    }
}

现在当我以这种方式调用该方法时:

var fileStream = Musics.TryGetMusic("DaDaDa.mp3");
musicMediaElement.SetSource(fileStream);
musicMediaElement.Play();

我收到一条错误消息,提示它无法读取已关闭的文件。

原因是我正在使用using 语句并且当我调用Play() 时文件已关闭。 我该如何解决这个问题?

【问题讨论】:

    标签: c# windows-phone-7 windows-phone-8 windows-phone isolatedstorage


    【解决方案1】:

    这是因为,我想你会这么称呼它,就像

    .... 
    
     using (IsolatedStorageFileStream fileStream = isolatedStorage.OpenFile(filePath, FileMode.Open, FileAccess.Read))
     {    
         return fileStream;
     }
    ....
    

    退出using 语句后,fileStream 实例将被释放。

    要解决这个问题,不要在此处使用using,而是跟踪该实例的生命周期并在适当的位置手动调用 dispose。

    【讨论】:

    • 感谢@Tigran。当它是另一个类(助手)Musics.TryGetMusic() 的方法并且我无法再访问它时,如何手动处理它?
    • @user2799350:您将其返回给调用者。所以调用者可以负责跟踪它。
    • 所以在我上面的问题中,我应该稍后处理var fileStream =...
    • @user2799350:完全正确。当你完成使用它并且不再需要它时(在你的情况下可能在 Play(..) 之后),调用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多