正确的下载Windows Phone 8图像的方法

时间:2013-10-09 23:32:33

标签: c# image windows-phone-8

我发现很难解决很简单的任务:如何从远程服务器下载图像?

最简单的方法就是:

BitmapImage img = new BitmapImage(new Uri("http://myserv/test.jpg", UriKind.Absolute));
xamlImageContainer.Source = img;

但我认为这个解决方案并不理想,因为它可以阻止UI线程(可以吗?)。 所以我决定使用“异步”方法:

async void LoadImage()
{
    xamlImageContainer.Source = await Task.Run(() =>
    {
        return new BitmapImage(new Uri("http://myserv/test.jpg", UriKind.Absolute));
    });
}

但是在return new BitmapImage行上我收到了UnauthorizedAccessException,其中说“无效的跨线程访问”! 这里有什么问题,请建议。

2 个答案:

答案 0 :(得分:1)

BitmapImage类型的对象只能在UI线程中创建。因此“无效的跨线程访问”。

但是,您可以将BitmapImage的{​​{1}}属性设置为CreateOptions。这样,图像就会在后台线程中下载和解码:

BackgroundCreation

答案 1 :(得分:1)

是的@anderZubi是对的。但是,如果要将后台线程中的内容加载到UI线程,CreateOptions是此问题的最佳解决方案。您需要调用Dispatcher。 Dispatcher.BeginInvoke(()=> YourMethodToUpdateUIElements());

这将在UI线程上调用该方法,您将不会获得AccessViolationException。

仅供参考。