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;
}
}
メソッド 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;
});
}
コンパイラは次のエラーを発行します。
- クラスまたはインターフェイス メソッド内の無効なトークン 'void'
- インライン
Stream imageStream = await LoadImageAsync(tempPhotoNote.Id);
必須 ";" 後await LoadImageAsync