2012-07-24 59 views
0

背景:我正在以高于60Hz的速度显示高速数码相机的实时图像。实时图像是通过更新Image控件的ImageSource的显示:检测图像控件是否已完成更新其图像

this.Dispatcher.Invoke(DispatcherPriority.Normal,(ThreadStart)delegate() { MyImage.Source = myNewBitMapImage; }); 

问题:我希望通过如果以前的图像没有被显示在屏幕上还没有跳过任何新的图像,以提高应用程序的性能。例如,当Image控件(MyImage)尚未完成最后一张图片的更新时,上面的调度程序调用将被跳过,直到MyImage再次变为“空闲”。

我在MFC中使用GetUpdateRect()来做类似的事情来检查是否还有一个区域需要更新,如果有的话,新图像的显示会被跳过。

问题:如何在WPF中实现相同的目标?如果图像控制尚未完成最后一张图像的更新,则跳过新图像。

感谢advace。

+0

设置“MyImage.Source”时是否已经下载图像,还是仍在下载?您可以检查[IsDownloading](http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.isdownloading)属性。你多久更新一次图片? – Clemens 2012-07-24 07:26:45

+0

我假设在创建图像时IsDownloading为TRUE(如果我错了,请纠正我)?如果是这种情况,那么不,图像在传递给MyImage.Source时已经被创建。 – seekingalpha 2012-07-24 19:13:39

回答

0

经过一番研究和测试,我意识到这可以通过调度员启动Backgroundworker来实现。基本上,在工作人员的DoWork中处理“MyImage.Source = myNewBitMapImage”,只要工作人员忙,下一个图像将被跳过。希望这可以帮助。