我有一组用于下载图片的Image
元素。所有图片都必须下载,但我希望首先下载用户正在查看的图片。如果用户更改了已查看的图片,我希望取消正在进行的下载,以便尽快获得已查看的图片。
要开始下载,我写道:myImage.Source = new BitmapImage(theUri);
。
我应该如何取消它?
myImage.Source = null;
?我不希望按代码下载图片以保持浏览器缓存的好处。
答案 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验证),因此缓存的图像立即加载〜。