Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight,C#:当没有更多图像时检测_C#_Silverlight - Fatal编程技术网

Silverlight,C#:当没有更多图像时检测

Silverlight,C#:当没有更多图像时检测,c#,silverlight,C#,Silverlight,我有一个连续图像的列表,当用户单击“下一步”时,需要按顺序加载这些图像。下一页是通过在url末尾的数字中添加一个来确定的,如:http://twoimages.com/image_1至http://twoimages.com/image_2。我希望能够检测到什么时候没有更多的图像加载。我可以使用一个事件,但它只有在它失败并完成运行其余代码后才会触发 public void LoadImage(string ImageUrl) { BitmapImage bmpImage; if

我有一个连续图像的列表,当用户单击“下一步”时,需要按顺序加载这些图像。下一页是通过在url末尾的数字中添加一个来确定的,如:
http://twoimages.com/image_1
http://twoimages.com/image_2
。我希望能够检测到什么时候没有更多的图像加载。我可以使用一个事件,但它只有在它失败并完成运行其余代码后才会触发

public void LoadImage(string ImageUrl)
{
    BitmapImage bmpImage;
    if (this.SilverlightImage.Source is BitmapImage)
    {
        bmpImage = this.SilverlightImage.Source as BitmapImage;
    }
    else
    {
        bmpImage = new BitmapImage();
        bmpImage.DownloadProgress += new EventHandler<DownloadProgressEventArgs>(bitmapImage_DownloadProgress);
    }

    bmpImage.UriSource = new Uri(ImageUrl, UriKind.RelativeOrAbsolute);

    if (this.SilverlightImage.Source == null)
    {
        this.SilverlightImage.Source = bmpImage;    
    }
}
public void LoadImage(字符串ImageUrl)
{
位图图像bmp图像;
if(this.SilverlightImage.Source是BitmapImage)
{
bmpImage=this.SilverlightImage.Source作为位图图像;
}
其他的
{
bmpImage=新的位图图像();
bmpImage.DownloadProgress+=新事件处理程序(bitmapImage_DownloadProgress);
}
bmpImage.UriSource=新Uri(ImageUrl,UriKind.RelativeOrAbsolute);
if(this.SilverlightImage.Source==null)
{
this.SilverlightImage.Source=bmp图像;
}
}
我希望能够检测到没有更多的图像加载,甚至不尝试加载一个不存在的图像

谢谢,


Aaron

您可以请求完整的图像列表或开始时的图像计数,然后开始加载。。。我不认为你可以用BitmapSource发送关于下一个图像的信息,可能是图像保留字节有帮助,但这只是黑客攻击,假设你没有已知数量的图像或程序在运行时知道的一些其他数据来查看图像URI是否有效,处理此问题的方法是在尝试加载映像之前(可能通过创建一个服务返回给定文件是否存在),调用服务器上的文件系统查看映像是否存在,这似乎比简单地尝试加载映像效率低得多。因为该服务调用需要是异步的(因为所有的服务调用都在Silverlight中),所以您需要重新构造代码以侦听事件,尽管您可以使其成为一个非常封闭的循环

我认为更大的问题是为什么:如果您试图减少运行其余代码的开销,这只会适得其反,因为多个网络调用几乎肯定会比您运行的任何代码花费更多的开销/时间


唯一想到的另一种方法是编写一个服务,返回某种复杂的对象,该对象同时包含图像和一个标志,告诉您下一个图像是否可用。这似乎有些过分,但如果您在尝试加载下一个图像之前确实需要知道下一个图像是否在那里,则可能值得研究一下。我再次指出,这个服务需要异步调用,因此您在任何情况下都在侦听事件,并且您要创建的服务并不简单(您需要一些WCF服务的孩子,它将返回一个复杂的对象)。我也认为这个解决方案不值得麻烦。

< P>最明智的方法是先下载一个“图像清单”。这可以是一个简单的XML文件或生成XML的简单ashx。没有真正需要做任何更重要的事情,比如构建服务或使用WCF

然后使用此XML中的URL列表传递给LoadImage方法,在到达最后一个按钮时可以禁用“下一步”按钮(在到达第一个按钮时禁用“上一步”按钮)

这不仅重量轻,而且允许使用有意义的文件名,也许还可以添加将来可能希望包含在图像中的其他元数据

如果你真的必须


但是,如果您确实需要一种快速方法来检查文件的存在性,您可以使用
ClientHTTP
实例来
HttpWebRequest
为文件发出“HEAD”请求。但是,如果您使用的是基于cookie的安全性,这可能会更加困难。

您找到了新的解决方案吗?我面临着一个类似的问题,这让我头痛了好几天。。。