正确取消Silverlight中的图像下载

时间:2009-12-03 16:32:14

标签: silverlight image download

我有一组用于下载图片的Image元素。所有图片都必须下载,但我希望首先下载用户正在查看的图片。如果用户更改了已查看的图片,我希望取消正在进行的下载,以便尽快获得已查看的图片。

要开始下载,我写道:myImage.Source = new BitmapImage(theUri);

我应该如何取消它?

  • myImage.Source = null;
  • 对BitmapImage采取行动吗?
  • 更好的解决方案?

我不希望按代码下载图片以保持浏览器缓存的好处。

1 个答案:

答案 0 :(得分:1)

这绝对可行 - 我只是测试它以确保。您可以尝试以下快速课程:

public partial class Page : UserControl
{
    private WebClient m_oWC;
    public Page()
    {
        InitializeComponent();
        m_oWC = new WebClient();
        m_oWC.OpenReadCompleted += new OpenReadCompletedEventHandler(m_oWC_OpenReadCompleted);
    }

    void StartDownload(string sImageURL)
    {
        if (m_oWC.IsBusy)
        {
            m_oWC.CancelAsync();
        }
        m_oWC.OpenReadAsync(new Uri(sImageURL));
    }

    void m_oWC_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        BitmapImage oBMI = new BitmapImage();
        oBMI.SetSource(e.Result);
        imgMain.Source = oBMI;
    }
}

这就像你想要的那样(我测试了它)。每当您使用图像的URL调用StartDownload时(可能每当用户单击下一个图像时),如果当前正在进行下载,则会取消该下载。 broswer缓存也肯定被使用(我用fiddler验证),因此缓存的图像立即加载〜。