Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
C# 如何在WP7应用程序中循环显示多个图像?_C#_Silverlight_Image_Loops_Windows Phone 7 - Fatal编程技术网

C# 如何在WP7应用程序中循环显示多个图像?

C# 如何在WP7应用程序中循环显示多个图像?,c#,silverlight,image,loops,windows-phone-7,C#,Silverlight,Image,Loops,Windows Phone 7,在我的(Silverlight)天气应用程序中,我正在从一个网站下载多达6幅不同的天气雷达图像(每幅图像相隔约20分钟),我需要做的是将每张图像显示一秒钟,然后在循环结束时暂停2秒钟,然后再次启动循环。(这意味着图像循环将一直播放,直到用户单击我想要的后退或主页按钮。) 因此,我有一个RadarImage类,如下所示,每个图像都被下载(通过WebClient),然后加载到RadarImage的实例中,然后将其添加到集合中(即:List) 因此,您可以看到我有一个计时器类的静态实例,该实例已停止(

在我的(Silverlight)天气应用程序中,我正在从一个网站下载多达6幅不同的天气雷达图像(每幅图像相隔约20分钟),我需要做的是将每张图像显示一秒钟,然后在循环结束时暂停2秒钟,然后再次启动循环。(这意味着图像循环将一直播放,直到用户单击我想要的后退或主页按钮。)

因此,我有一个RadarImage类,如下所示,每个图像都被下载(通过WebClient),然后加载到RadarImage的实例中,然后将其添加到集合中(即:
List

因此,您可以看到我有一个计时器类的静态实例,该实例已停止(如果正在运行),那么循环应该显示每个图像一秒钟。当所有6个都显示出来后,它会暂停,计时器会启动,两秒钟后会再次调用DisplayRadarImages()

但正如我之前所说的,由于某些原因,我只能得到最后一张要显示的图像,而我似乎无法让它正常工作

我对WP7开发(虽然不是.Net)相当陌生,所以我只是想知道如何最好地做到这一点——我正在考虑使用web浏览器控件来尝试这一点,但肯定有一种更优雅的方式来循环浏览一组图像

对不起,时间太长了,如果您有任何帮助或建议,我们将不胜感激


Mike

您可以使用带有计时器或睡眠的后台线程定期更新图像控件

您需要将更新发送到用户界面

Dispatcher.BeginInvoke( () => { /*  your UI code */ } );

可以使用带有计时器或睡眠的背景线程定期更新图像控件

您需要将更新发送到用户界面

Dispatcher.BeginInvoke( () => { /*  your UI code */ } );

为什么不将最后一幅图像添加两次到radarImages,将计时器设置为1000,并在每个刻度上仅显示一幅图像?

为什么不将最后一幅图像添加两次到radarImages,将计时器设置为1000,并在每个刻度上仅显示一幅图像?

仅供参考WP7使用Silverlight(基于版本3),它是WPF子集的超集。这不是作为WPFYep的smae,我的错误-但感谢您指出。仅供参考的WP7使用Silverlight(基于版本3),它是WPF子集的超集。这不是smae作为WPFYep,我的错误-但感谢您指出。感谢您的建议,但循环之间的延迟不是问题-这是事实,只有最后一帧出现过。是的,我理解这一点,但其他帧没有出现,因为更改没有发送。因此,您必须做出以下选择:a)手动呼叫调度程序(Dispatcher.BeginInvoke)或b)从您的方法返回,因此电话会手动进行调度。抱歉,Hinek,我误解了你的答案-我还没有回到那个问题上来,因为我一直在度假,但这个周末会这样做,所以我会尝试你的方式,还有Dispatcher.BeginInvoke.感激你的建议,但循环之间的延迟不是问题-事实上只有最后一帧出现。是的,我理解这一点,但其他帧不会出现,因为更改未被调度。因此,您必须做出以下选择:a)手动呼叫调度程序(Dispatcher.BeginInvoke)或b)从您的方法返回,因此电话会手动进行调度。抱歉,Hinek,我误解了你的答案-我还没有回到那个问题上来,因为我一直在度假,但这个周末会这样做,所以我会尝试你的方式,也会尝试调度员。BeginInvoke。谢谢米克-我会尝试一下,看看如何进行。你没有任何代码可以证明你是这么做的,是吗?(这篇文章很有用,但似乎没有具体介绍……显然谷歌也会这么做。)不用担心。我还没有看到发布的源代码完全符合您的要求,但是我在自己的代码中验证了在显示更新之间在工作事件处理程序中引入睡眠是非常直接的,事实上上面的链接也使用了睡眠。我确实使用了Dispatcher.BeginInvoke,这正是您建议Hinek的方式,所以,谢谢你,但也要感谢米克N。谢谢米克,我会试试这个,看看效果如何。你没有任何代码可以证明你是这么做的,是吗?(这篇文章很有用,但似乎没有具体介绍……显然谷歌也会这么做。)不用担心。我还没有看到发布的源代码完全符合您的要求,但是我在自己的代码中验证了在显示更新之间在工作事件处理程序中引入睡眠是非常直接的,事实上上面的链接也使用了睡眠。我确实使用了Dispatcher.BeginInvoke,这正是您建议Hinek的方式,所以,谢谢你,但也要感谢米克·N。
Dispatcher.BeginInvoke( () => { /*  your UI code */ } );