我有一套用于下载图片的Image
元素。所有图片都必须下载,但我希望首先下载用户正在查看的图片。如果用户更改所查看的图片,我希望取消正在进行的下载以尽可能快地获取所查看的图片。正确取消Silverlight中的图像下载
要开始下载我写:myImage.Source = new BitmapImage(theUri);
。
我应该如何取消它?
myImage.Source = null;
?- 作用于BitmapImage?
- 更好的解决方案?
我不希望通过代码下载图片以保持浏览器缓存的优势。
我有一套用于下载图片的Image
元素。所有图片都必须下载,但我希望首先下载用户正在查看的图片。如果用户更改所查看的图片,我希望取消正在进行的下载以尽可能快地获取所查看的图片。正确取消Silverlight中的图像下载
要开始下载我写:myImage.Source = new BitmapImage(theUri);
。
我应该如何取消它?
myImage.Source = null;
?我不希望通过代码下载图片以保持浏览器缓存的优势。
这绝对是可行的 - 我只是测试它来确保。这里是一个快速类,你可以尝试:
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缓存也一定会被使用(我用提琴手验证过),所以缓存的图像会立即被加载。
我不知道WebClient类实际上是对浏览器下载功能的访问。即使我需要一些时间来适应我们的项目,我现在也信任你并确认答案。谢谢。 – Mart 2009-12-07 10:12:42
为什么你认为使用代码会失去浏览器缓存的好处? – AnthonyWJones 2009-12-03 18:28:48
“通过代码下载”我的意思是使用web服务下载图片字节并将其分配给图像元素。这可能是另一个问题的主题,但是,通过保留浏览器缓存,您将使用什么技术来控制下载请求? – Mart 2009-12-03 22:11:06