C# 在metro应用程序中打开媒体文件

C# 在metro应用程序中打开媒体文件,c#,windows-8,windows-runtime,C#,Windows 8,Windows Runtime,它给了我一个文件找不到异常?在资产内部,我有“beep.wav”,但不工作。 visual studio 2012\Projects\Myproject\Myproject\Assets private async void beep() { MediaElement snd = new MediaElement(); StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("As

它给了我一个文件找不到异常?在资产内部,我有“beep.wav”,但不工作。
visual studio 2012\Projects\Myproject\Myproject\Assets

private async void beep()
{
    MediaElement snd = new MediaElement();
    StorageFolder folder = await Package.Current.InstalledLocation.GetFolderAsync("Assets");
    StorageFile file = await folder.GetFileAsync("beep.wav");
    var stream = await file.OpenAsync(FileAccessMode.Read);
    snd.SetSource(stream, file.ContentType);
    snd.Play();
}

上面的代码确实有效,我只需要手动将其添加到项目中。…

您应该使用以下代码访问存储在资产文件夹中的文件

 var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/beep.wav"));

运行应用程序时,
Package.Current.InstalledLocation
将不是项目所在的目录(visual studio 2012\Projects\Myproject\Myproject\Assets),而是应用程序部署到的目录(可能类似于
visual studio 2012\Projects\Myproject\Myproject\bin\Debug\AppX\Assets

因此,如果您只是手动将wav文件复制到项目的Assets目录中,它将不起作用,因为您的应用程序将在部署位置查找它

您注意到,在将wav文件添加到项目中后,它就工作了,但将该文件添加到项目中并不完全是它工作的原因。如果将文件添加到Windows应用商店项目中,并在文件的属性中设置生成操作内容,则该文件将被复制到depl您的应用程序的位置

您不必手动将此文件的生成操作设置为Content,因为VS会自动对某些文件类型(如wav)执行此操作,因此,文件被复制到部署位置