为什么这个从服务器加载图像的简单代码不起作用?

时间:2014-02-12 12:10:54

标签: c# wpf image

我正在使用wpf中的法师源并尝试这个简单的测试,看看我是否能获得任何幸运:

 var test = new BitmapImage(new Uri("https://thenotebook.org/sites/default/files/fallCartoon.jpg"));

在调试窗口中查看测试时,其所有属性都设置为null,因此它似乎没有加载图像。为什么呢?

2 个答案:

答案 0 :(得分:0)

BitmapImage异步加载网络数据。这意味着它会在后台开始下载时立即返回。所以你的代码可能没有任何问题。检查IsDownloading属性。订阅DownloadCompletedDownloadFailed个活动。

根据我们的评论同步版本:

var bytes = new WebClient().DownloadData("https://thenotebook.org/sites/default/files/fallCartoon.jpg");
var test = new BitmapImage();
test.BeginInit();
test.StreamSource = new MemoryStream(bytes);
test.EndInit();
Console.WriteLine(test.PixelWidth);
Console.WriteLine(test.PixelHeight);

答案 1 :(得分:0)

遵循fejesjoco的建议:

public static BitmapImage ImageFromUriSync(string uri)
{
    using(var client = new WebClient())
    {
        byte[] data = client.DownloadData(uri);

        using(var stream = new MemoryStream(data))
        {
            var img = new BitmapImage();
            img.BeginInit();
            img.CacheOption = BitmapCacheOption.OnLoad;
            img.StreamSource = stream;
            img.EndInit();

            return img;
        }
    }
}