从 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 创建一个流,然后从该流加载位图并在返回之前将其冻结。我相信这应该会创建一个非常臃肿的代码。
在尝试显示来自网络的图像时,有没有办法让代码更小(更好)和(更多)可读?