2012-12-18 159 views
4

我有這段代碼GetFilesAsync停止工作

public static class Storage 
{ 
    public async static Task<bool> Exists(string filename) 
    { 
     var folder = await Package.Current.InstalledLocation.GetFolderAsync("Assets"); 
     var _files= await folder.GetFilesAsync(CommonFileQuery.OrderByName).AsTask().ConfigureAwait(false); 

     var file = _files.FirstOrDefault(x => x.Name == filename); 
     return file != null; 
    } 
} 

,並從我的Windows 8 Store應用程序調用它;

this.IconExists = this.Game != null && Storage.Exists(this.IconName).Result; 

所以,如果我把一個破發點以上線並運行它一步一步來,它的工作原理,但沒有突破,只是運行該應用程序會導致應用程序掛起。

一個類似的代碼正在工作在幾天前的提交;

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using Windows.ApplicationModel; 
using Windows.Storage; 
using Windows.Storage.Search; 

namespace eggrr.Core.FileStorage 
{ 
    public class Storage 
    { 
     private IReadOnlyList<StorageFile> _files; 

     public Storage() 
     { 
      _files = GetFilesAsync("Assets").Result; 
     } 

     private async Task<IReadOnlyList<StorageFile>> GetFilesAsync(string relativeFolderPath) 
     { 
      var path = string.Format("{0}\\{1}", Package.Current.InstalledLocation.Path, relativeFolderPath); 
      var folder = await StorageFolder.GetFolderFromPathAsync(path); 
      return await folder.GetFilesAsync(CommonFileQuery.OrderByName).AsTask().ConfigureAwait(false); 
     } 

     public bool Exists(string filename) 
     { 
      var file = _files.FirstOrDefault(x => x.Name == filename); 
      return file != null; 
     } 

     private static readonly Storage _instance = new Storage(); 
     public static Storage Instance { get { return _instance; } } 
    } 
} 

任何想法?

回答

3

似乎這解決了它的問題;

public static class Storage 
{ 
    private static IReadOnlyList<StorageFile> _files; 

    static Storage() 
    { 
     _files = GetFilesAsync("Assets").Result; 
    } 

    private async static Task<IReadOnlyList<StorageFile>> GetFilesAsync(string relativeFolderPath) 
    { 
     var folder = await Package.Current.InstalledLocation.GetFolderAsync("Assets").AsTask().ConfigureAwait(false); 
     return await folder.GetFilesAsync(CommonFileQuery.OrderByName).AsTask().ConfigureAwait(false); 
    } 

    public static bool Exists(string filename) 
    { 
     var file = _files.FirstOrDefault(x => x.Name == filename); 
     return file != null; 
    } 
} 

更多信息;

+1

感謝分享的是,它一定會幫助有同樣的問題等。 –