複数の画像をどのように開いているのかわかりませんが、すべてのメソッドが非同期であるため、ファイルを順番に反復処理するのではなく、すべてを並行して開く必要があります。
したがって、これを行う代わりに (次のイメージのロードを開始する前に前のイメージのロードを待機する場合):
foreach (var fileName in fileNames)
{
var file = await folder.GetFileAsync(fileName);
using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
obj.Image = new BitmapImage();
await obj.Image.SetSourceAsync(stream);
}
}
次のようにアプローチする必要があります。
// not sure about the type of obj
public async Task<Image> LoadImage(string fileName, dynamic obj)
{
var file = await folder.GetFileAsync(fileName);
using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
obj.Image = new BitmapImage();
await obj.Image.SetSourceAsync(stream);
}
}
var tasks = fileNames.Select(f => LoadImage(f, obj)).ToArray();
await Task.WhenAll(tasks);
これにより、イメージをロードする待機可能なタスクの配列が初期化され、それらが同時に実行されるようにすべてのタスクが同時に待機されます。