Wpf 使用任务并行库下载BitmapImage

Wpf 使用任务并行库下载BitmapImage,wpf,task,task-parallel-library,bitmapimage,Wpf,Task,Task Parallel Library,Bitmapimage,从UI线程上的URI下载BitmapImage会挂起应用程序。 为了避免这种情况,我尝试在一个单独的线程中下载BitmapImage,我想知道是否可以使用TPL简化它 我目前的方法如下: Task.Factory.StartNew<BitmapImage>(() => new BitmapImage(myUri) { CacheOption = BitmapCacheOption.OnLoad }, CancellationToken.None, Tas

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

我目前的方法如下:

            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());
Task.Factory.StartNew(()=>new BitmapImage(myUri){CacheOption=BitmapCacheOption.OnLoad},CancellationToken.None,TaskCreationOptions.None,new StaTaskScheduler(1))
.ContinueWith(t=>image1.Source=t.Result,TaskScheduler.FromCurrentSynchronizationContext());
当然,问题是BitmapImage不是在与映像相同的线程上创建的

无法冻结从URI加载的BitmapImage,因此无法正常工作

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


在尝试从web显示图像时,是否有办法使代码保持小(er)和(更)可读性?

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

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

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