无法从MonoGame获取目录中的文件列表

时间:2013-03-04 02:12:25

标签: c# io xna directory monogame

当我遇到一个有趣的问题时,我正在将我的一个XNA项目移植到Monogame中。因为作为一个Windows 8用户我的应用程序是沙箱,我不能使用我习惯的Directory.GetFiles方法来提取内容目录中的文件列表。我的目标是获取内容目录中的文件列表,如(myappinstalllocation \ Content \ TypeofContent \ XmlFiles)。

在Xna中我会使用:

string[] skillFiles = Directory.GetFiles(path, "*.xml");

我从msdn尝试了以下代码,但异步方法有时无法返回几分钟,有时根本不会:

string[] fileNames = SystemIO.getFileNames(path, "xml").Result;

public static async Task<string[]> getFileNames(string pPath, string pExt)
    {
        List<string> results = new List<string>();
        StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(pPath);

        IReadOnlyList<StorageFile> contents = await folder.GetFilesAsync();

        foreach (StorageFile file in contents)
        {
            if (file.FileType.Contains(pExt))
            {
                results.Add(file.Name);
            }
        }

        return results.ToArray();
    }

我不知道MonoGame是否提供了获取文件名或WinStore API的方法。我想尽可能动态地加载我的内容,所以我希望这是可行的。

1 个答案:

答案 0 :(得分:4)

我认为你所看到的是一个僵局。在UI线程上使用Task.Result即可。请尝试使用await

string[] fileNames = await SystemIO.getFileNames(path, "xml");

await是非阻止的,并且允许UI线程在您对getFileNames的调用完成时执行其他操作。

查看Stephen Cleary关于此主题的优秀博客文章:http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html