using async await on Windows Phone 7

2019-08-14 14:51发布

问题:

Write the code which asynchronus load BitmapImage.

public async void AsyncLoadPhotoNotesFromIsolatedStorage()
{
    IsolatedStorageSettings appStorageSettings = IsolatedStorageSettings.ApplicationSettings;
    if (appStorageSettings.Count > 0)
    {
        var loadedPhotoNotes = new ObservableCollection<PhotoNote>();
        foreach (Object obj in appStorageSettings.Values)
        {
            var tempPhotoNote = (PhotoNote) obj;
            BitmapImage bitmapImage = null;
            Stream imageStream = await LoadImageAsync(tempPhotoNote.Id);
            if (imageStream != null)
            {   
                bitmapImage = new BitmapImage();
                bitmapImage.SetSource(imageStream);
            }

            tempPhotoNote.Picture = bitmapImage;
            loadedPhotoNotes.Insert(0, tempPhotoNote);
        }
        //loadedPhotoNotes.Reverse();
        PhotoNotes = loadedPhotoNotes;
    }
}

Method LoadImageAsync:

private Task<Stream> LoadImageAsync(string fileName)
{
    return Task.Factory.StartNew(() =>
        {
            if (fileName == null)
            {
                throw new ArgumentException("one of parameters is null");
            }

            Stream fileStream = null;

            using (var appStorageFile = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (appStorageFile.FileExists(fileName))
                {
                    fileStream = appStorageFile.OpenFile(fileName, FileMode.Open, FileAccess.Read);
                }
            }
            return fileStream;
        });
}

The compiler issues the following error:

  • Invalid token 'void' inside the class or interface method
  • In line Stream imageStream = await LoadImageAsync(tempPhotoNote.Id); required ";" after await LoadImageAsync