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 文件中并且您使用绑定来加载它,请将
当然,最好在图像显示之前提供一个备用占位符。一种方法是使用
如果您必须以编程方式执行此操作,请尝试创建一个异步 ImageSource,然后将 BitmapImage 的源设置为它。