关于 wpf:使用任务并行库下载 BitmapImage

Download BitmapImage using Task Parallel Library

从 UI 线程上的 URI 下载 BitmapImage 会挂起应用程序。
为避免这种情况,我尝试在单独的线程中下载 BitmapImage,想知道是否可以使用 TPL 使其变得简单。

我目前的方法如下:

1
2
            Task.Factory.StartNew<BitmapImage>(() => new BitmapImage(myUri) { CacheOption = BitmapCacheOption.OnLoad }, CancellationToken.None, TaskCreationOptions.None, new StaTaskScheduler(1))
        .ContinueWith(t => image1.Source = t.Result, TaskScheduler.FromCurrentSynchronizationContext());

这个问题当然是事实,BitmapImage 不是在与 Image 相同的线程上创建的。

从URI加载的BitmapImage不能被冻结,所以不能正常工作。

目前,我能想到的最简单的方法是从 URI 创建一个流,然后从该流加载位图并在返回之前将其冻结。
我相信这应该会创建一个非常臃肿的代码。

在尝试显示来自网络的图像时,有没有办法让代码更小(呃)和(更多)可读?


如果图像在 XAML 文件中并且您使用绑定来加载它,请将 IsAsync 设置为 true 以异步下载它。

当然,最好在图像显示之前提供一个备用占位符。一种方法是使用 PriorityBinding.

如果您必须以编程方式执行此操作,请尝试创建一个异步 ImageSource,然后将 BitmapImage 的源设置为它。