private async Task LoadUserIconAsync(Uri imageUri, long userId)
{
var oldImage = this.UserIcon.Image;
this.UserIcon.Image = null;
oldImage?.Dispose();
await this.UserIcon.SetImageFromTask(async () =>
{
var uri = imageUri.AbsoluteUri.Replace("_normal", "_bigger");
using (var imageStream = await Networking.Http.GetStreamAsync(uri))
{
var image = await MemoryImage.CopyFromStreamAsync(imageStream);
// 画像の読み込み中に選択中のユーザーが変化していたらキャンセルとして扱う
var selectedUser = (UserInfo)this.UserList.SelectedItem;
if (selectedUser.Id != userId)
{
image.Dispose();
throw new OperationCanceledException();
}
return image;
}
});
}