如何从Xamarin.Forms中读取的异步磁盘中获取回调?

时间:2016-12-06 10:33:19

标签: c# asynchronous xamarin xamarin.forms

我有一个GetPhoto方法从磁盘上获取照片:

public async Task<IFile> GetPhoto(string fileName)
{
    var localStorage = FileSystem.Current.LocalStorage;
    var folderExists = await localStorage.CheckExistsAsync(PhotosFolder);

    if (!folderExists.Equals(ExistenceCheckResult.FolderExists))
    {
        return null;
    }

    var localStorageFolder = await localStorage.GetFolderAsync(PhotosFolder);
    var fileExists = await localStorageFolder.CheckExistsAsync(fileName);

    if (!fileExists.Equals(ExistenceCheckResult.FileExists))
    {
        return null;
    }

    return await localStorageFolder.GetFileAsync(fileName);

}

另一个用特定照片调用GetPhoto:

public async Task<ImageSource> ProfileImageSource()
{
    var file = await StorageHelper.Current.GetPhoto("profile_picture.jpg");
    if (file == null)
    {
        return ImageSource.FromFile("profile_placeholder.png");
    }

    var stream = await file.OpenAsync(FileAccess.Read);
    stream.Close();
    return ImageSource.FromStream(() => stream);

}

这些运行异步。

然后,我有一个SetTableView方法。此方法获取要在表视图中显示的配置文件图像。

 private async void SetTableView()
 {
  var profileImageSource = await ProfileImageSource();

  Content = new TableView
  {
     HasUnevenRows = true,
     Intent = TableIntent.Menu,
     Root = new TableRoot()
     {
        new TableSection()
         {
            new ProfileCell(profileImageSource, "Casa de Férias", HandleProfileCellTap())
         }
     }
   };
}

但是,构建TableView时,图像源尚未从流中完全加载图像,导致我崩溃,说数据不能为空。

如何告诉TableView仅在我的ImageSource准备就绪时构建?

谢谢

0 个答案:

没有答案