从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());
这个问题当然是因为BitmapImage不是在与Image相同的线程上创建的。
从URI加载的BitmapImage无法冻结,因此无法正常工作。
目前,我能想到的最简单的方法是从URI创建流,然后从该流中加载位图并在返回之前将其冻结。 这应该创造一个我相信真正膨胀的代码。
有没有办法在尝试从网络上显示图像时保持代码小(呃)和(更多)可读?
答案 0 :(得分:2)
如果图像在XAML文件中并且您正在使用绑定加载它,请将IsAsync
设置为true以将其下载为异步。
当然,最好在图像显示之前提供后备占位符。一种方法是使用PriorityBinding
。
如果您必须以编程方式执行此操作,请尝试创建异步ImageSource,然后将BitmapImage的源设置为它。