任何人都知道如何在WPF中异步创建BitmapFrame
我想批量打印其Image
属性设置为代码的XAML Source
元素。这里LogoImageUrl
是我想要异步加载的Web图像的URL。
LogoImage.Source = BitmapFrame.Create(new Uri(LogoImageUrl));
我可以像这样创建async
方法:
public async Task<BitmapFrame> GetBitmapFrame(Uri uri)
{
await ... // What to be awaited?
return BitmapFrame.Create(uri);
}
...所以我可以在try
块中使用该方法,然后在finally
块中打印它?
答案 0 :(得分:1)
您应该异步下载Web图像并从下载的缓冲区创建一个BitmapFrame:
public async Task<BitmapFrame> GetBitmapFrame(Uri uri)
{
var httpClient = new System.Net.Http.HttpClient();
var buffer = await httpClient.GetByteArrayAsync(uri);
using (var stream = new MemoryStream(buffer))
{
return BitmapFrame.Create(
stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}
由于上例中的BitmapFrame.Create
调用返回一个冻结的BitmapFrame,您也可以异步创建BitmapFrame(虽然我怀疑它是必要的)。
public async Task<BitmapFrame> GetBitmapFrame(Uri uri)
{
var httpClient = new System.Net.Http.HttpClient();
var buffer = await httpClient.GetByteArrayAsync(uri);
return await Task.Run(() =>
{
using (var stream = new MemoryStream(buffer))
{
return BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
});
}