2013-03-04 29 views
0

當我遇到一個有趣的問題時,我正在將我的一個XNA項目移植到Monogame中。由於作爲Windows 8用戶,我的應用程序已被沙盒化,因此我無法使用我習慣於在內容目錄中提取文件列表的Directory.GetFiles方法。我的目標是獲取內容目錄中的文件列表,如(myappinstalllocation \ Content \ TypeofContent \ XmlFiles)。無法獲取MonoGame目錄中的文件列表

在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的方法。我希望儘可能動態加載我的內容,所以我希望這是可行的。

回答

4

我認爲你所看到的是一個僵局。在UI線程上使用Task.Result可以做到這一點。嘗試使用await代替:

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

await是非阻塞,並允許UI線程做其他事情,而你到getFileNames調用完成。

退房關於這個問題的斯蒂芬·克利裏的優秀博客文章:http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

+0

這個工作。我還必須將async關鍵字添加到調用getFilenames()的方法中 – ChargerIIC 2013-03-05 00:49:46

相關問題